Skip to content

Commit

Permalink
fix: memory leak related to logging within server-side rendering (#520)
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Stadler committed Sep 26, 2020
1 parent 6c0974a commit 88ba368
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 25 deletions.
8 changes: 7 additions & 1 deletion src/server/isomorphic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { createApp, IApp } from '@/app/app';
import { IState } from '@/app/state';
import { IAppConfig } from '@/app/config/IAppConfig';
import { PersistCookieStorage } from '@vuesion/addon-vuex-persist/dist/PersistCookieStorage';
import { Logger } from './utils/Logger';
import { createLogger } from '@/server/utils/createLogger';
import { initHttpService } from '@shared/services/HttpService/HttpService';

export interface IServerContext {
Expand Down Expand Up @@ -128,11 +128,17 @@ export default (context: IServerContext) => {
resolve(app);
}
} catch (e) {
// Only create logger when necessary and make sure to clean up resources
// as we're running this in a new V8 context for every request.
// See also https://github.com/winstonjs/winston/issues/512 and https://ssr.vuejs.org/api/#runinnewcontext.
const Logger = createLogger();
Logger.warn(
'error in prefetch for route: %s; error: %s',
router.currentRoute.fullPath,
JSON.stringify(e, Object.getOwnPropertyNames(e)),
);
Logger.clear();
Logger.close();

reject(e);
}
Expand Down
26 changes: 2 additions & 24 deletions src/server/utils/Logger.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,3 @@
import * as winston from 'winston';
import { createLogger } from '@/server/utils/createLogger';

export const Logger: winston.Logger = winston.createLogger({
transports: [
new winston.transports.File({
filename: 'logs/error.log',
level: 'error',
maxFiles: 5,
maxsize: 10485760,
format: winston.format.combine(winston.format.splat(), winston.format.json()),
}),
new winston.transports.File({
filename: 'logs/all.log',
maxFiles: 5,
maxsize: 10485760,
format: winston.format.combine(winston.format.splat(), winston.format.json()),
}),
new winston.transports.Console({
level: 'debug',
handleExceptions: true,
format: winston.format.combine(winston.format.splat(), winston.format.colorize(), winston.format.simple()),
}),
],
exitOnError: false,
});
export const Logger = createLogger();
27 changes: 27 additions & 0 deletions src/server/utils/createLogger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import * as winston from 'winston';

export const createLogger = () => {
return winston.createLogger({
transports: [
new winston.transports.File({
filename: 'logs/error.log',
level: 'error',
maxFiles: 5,
maxsize: 10485760,
format: winston.format.combine(winston.format.splat(), winston.format.json()),
}),
new winston.transports.File({
filename: 'logs/all.log',
maxFiles: 5,
maxsize: 10485760,
format: winston.format.combine(winston.format.splat(), winston.format.json()),
}),
new winston.transports.Console({
level: 'debug',
handleExceptions: true,
format: winston.format.combine(winston.format.splat(), winston.format.colorize(), winston.format.simple()),
}),
],
exitOnError: false,
});
};

0 comments on commit 88ba368

Please sign in to comment.