UNPKG

2.84 kBJavaScriptView Raw
1"use strict";
2
3var isObject = require("type/object/is")
4 , ensureObject = require("type/object/ensure")
5 , assign = require("es5-ext/object/assign")
6 , d = require("d")
7 , rootLogger = require("../")
8 , emitter = require("./emitter")
9 , getTimestampResolver = require("./get-timestamp-resolver")
10 , registerMasterWriter = require("./get-master-writer").register
11 , setupVisibility = require("./setup-visibility")
12 , getDefaultNamespace = require("./get-default-namespace")
13 , levelSymbols = require("./level-symbols")
14 , resolveMessageProperties = require("./private/abstract-writer/resolve-message-properties");
15
16var setDefaultNamespace = getDefaultNamespace.set;
17
18var LogWriter = function (env /*, options */) {
19 if (!(this instanceof LogWriter)) throw new Error("LogWriter cannot be invoked without new");
20 ensureObject(env);
21 var options = arguments[1];
22 if (!isObject(options)) options = {};
23
24 registerMasterWriter(this);
25
26 if (options.defaultNamespace) setDefaultNamespace(options.defaultNamespace);
27
28 setupVisibility(env.LOG_LEVEL, (env.LOG_DEBUG || env.DEBUG || "").split(","));
29
30 if (env.LOG_TIME) this.timestampResolver = getTimestampResolver(env.LOG_TIME);
31
32 rootLogger.getAllInitializedLevels().forEach(this.setupLevelLogger, this);
33 emitter.on(
34 "init",
35 function (event) { if (!event.logger.namespace) this.setupLevelLogger(event.logger); }.bind(
36 this
37 )
38 );
39
40 emitter.on(
41 "log",
42 function (event) {
43 if (!this.isLoggerEnabled(event.logger)) return;
44 if (!event.message) {
45 this.resolveMessageTokens(event);
46 this.resolveMessage(event);
47 }
48 this.writeMessage(event);
49 }.bind(this)
50 );
51};
52
53LogWriter.levelPrefixes = levelSymbols;
54LogWriter.resolveNamespaceMessagePrefix = function (logger) {
55 if (!logger.namespace) return null;
56 var rootNamespace = logger.namespaceTokens[0];
57 if (getDefaultNamespace() === rootNamespace) {
58 if (logger.namespace === rootNamespace) return null;
59 return logger.namespace.slice(rootNamespace.length);
60 }
61 return logger.namespace;
62};
63
64Object.defineProperties(
65 LogWriter.prototype,
66 assign(
67 {
68 constructor: d(LogWriter),
69 isLoggerEnabled: d(function (logger) { return logger.isEnabled; }),
70 setupLevelLogger: d(function (logger) {
71 this.setupLevelMessagePrefix(logger);
72 var resolveNamespaceMessagePrefix = this.constructor.resolveNamespaceMessagePrefix;
73 Object.defineProperty(
74 logger, "namespaceMessagePrefix",
75 d.gs(function () { return resolveNamespaceMessagePrefix(this); })
76 );
77 }),
78 setupLevelMessagePrefix: d(function (logger) {
79 logger.levelMessagePrefix = this.constructor.levelPrefixes[logger.level];
80 })
81 },
82 resolveMessageProperties
83 )
84);
85
86module.exports = LogWriter;