Do not bind logger to global object, now it's a part of serverOptions

This commit is contained in:
Daniel García Aubert
2020-06-02 11:49:54 +02:00
parent 62d66f2dbc
commit 48c28aea0b
8 changed files with 97 additions and 68 deletions
+6 -6
View File
@@ -47,7 +47,7 @@ const LayergroupMetadata = require('../utils/layergroup-metadata');
const RendererStatsReporter = require('../stats/reporter/renderer');
const initializeStatusCode = require('./middlewares/initialize-status-code');
const logger = require('./middlewares/logger');
const initLogger = require('./middlewares/logger');
const bodyParser = require('body-parser');
const servedByHostHeader = require('./middlewares/served-by-host-header');
const stats = require('./middlewares/stats');
@@ -97,7 +97,7 @@ module.exports = class ApiRouter {
const surrogateKeysCacheBackends = createSurrogateKeysCacheBackends(serverOptions);
const surrogateKeysCache = new SurrogateKeysCache(surrogateKeysCacheBackends);
const templateMaps = createTemplateMaps({ redisPool, surrogateKeysCache });
const templateMaps = createTemplateMaps({ redisPool, surrogateKeysCache, logger: this.serverOptions.logger });
const analysisStatusBackend = new AnalysisStatusBackend();
const analysisBackend = new AnalysisBackend(metadataBackend, serverOptions.analysis);
@@ -200,7 +200,7 @@ module.exports = class ApiRouter {
middlewares.forEach(middleware => apiRouter.use(middleware()));
apiRouter.use(logger());
apiRouter.use(initLogger({ logger: this.serverOptions.logger }));
apiRouter.use(initializeStatusCode());
apiRouter.use(bodyParser.json());
apiRouter.use(servedByHostHeader());
@@ -225,7 +225,7 @@ module.exports = class ApiRouter {
}
};
function createTemplateMaps ({ redisPool, surrogateKeysCache }) {
function createTemplateMaps ({ redisPool, surrogateKeysCache, logger }) {
const templateMaps = new TemplateMaps(redisPool, {
max_user_templates: global.environment.maxUserTemplates
});
@@ -234,10 +234,10 @@ function createTemplateMaps ({ redisPool, surrogateKeysCache }) {
const startTime = Date.now();
surrogateKeysCache.invalidate(new NamedMapsCacheEntry(user, templateName), (err) => {
if (err) {
return global.logger.error(err);
return logger.error(err);
}
global.logger.info({ user, type: 'named_map_invalidation', elapsed: Date.now() - startTime });
logger.info({ user, type: 'named_map_invalidation', elapsed: Date.now() - startTime });
});
}
+5 -5
View File
@@ -2,13 +2,13 @@
const uuid = require('uuid');
module.exports = function logger () {
return function loggerMiddleware (req, res, next) {
module.exports = function initLogger ({ logger }) {
return function initLoggerMiddleware (req, res, next) {
const id = req.get('X-Request-Id') || uuid.v4();
const logger = res.locals.logger = global.logger.child({ id });
res.locals.logger = logger.child({ id });
logger.info(req);
res.on('finish', () => logger.info(res));
res.locals.logger.info(req);
res.on('finish', () => res.locals.logger.info(res));
next();
};
+3 -2
View File
@@ -3,6 +3,7 @@
const fqdn = require('@carto/fqdn-sync');
var _ = require('underscore');
var OverviewsQueryRewriter = require('./utils/overviews-query-rewriter');
const Logger = require('./utils/logger');
var rendererConfig = _.defaults(global.environment.renderer || {}, {
cache_ttl: 60000, // milliseconds
@@ -127,7 +128,7 @@ module.exports = {
varnish_purge_enabled: global.environment.varnish.purge_enabled,
fastly: global.environment.fastly || {},
cache_enabled: global.environment.cache_enabled,
log_format: global.environment.log_format,
useProfiler: global.environment.useProfiler,
pubSubMetrics: Object.assign({ enabled: false }, global.environment.pubSubMetrics)
pubSubMetrics: Object.assign({ enabled: false }, global.environment.pubSubMetrics),
logger: new Logger()
};
+48
View File
@@ -0,0 +1,48 @@
'use strict';
const pino = require('pino');
module.exports = class Logger {
constructor () {
const { LOG_LEVEL, NODE_ENV } = process.env;
const options = {
base: null, // Do not bind hostname, pid and friends by default
level: LOG_LEVEL || NODE_ENV === 'test' ? 'fatal' : 'info'
};
const dest = pino.destination({ sync: false });
this._logger = pino(options, dest);
}
trace (...args) {
this._logger.trace(...args);
}
debug (...args) {
this._logger.debug(...args);
}
info (...args) {
this._logger.info(...args);
}
warn (...args) {
this._logger.warn(...args);
}
error (...args) {
this._logger.error(...args);
}
fatal (...args) {
this._logger.fatal(...args);
}
child (...args) {
return this._logger.child(...args);
}
finish (callback) {
return pino.final(this._logger, callback);
}
};