1 | "use strict";
|
2 |
|
3 | var 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 |
|
16 | var setDefaultNamespace = getDefaultNamespace.set;
|
17 |
|
18 | var 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 |
|
53 | LogWriter.levelPrefixes = levelSymbols;
|
54 | LogWriter.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 |
|
64 | Object.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 |
|
86 | module.exports = LogWriter;
|