Skip to content

Commit

Permalink
feat: upgrade configuration ot use LogWriter
Browse files Browse the repository at this point in the history
BREAKING CHANGE:
Removed format and formatEventMessage utilties
  • Loading branch information
medikoo committed Apr 8, 2019
1 parent f863178 commit 7ac81e3
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 258 deletions.
94 changes: 47 additions & 47 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
"use strict";

const isObject = require("es5-ext/object/is-object")
, d = require("d")
, clc = require("cli-color/bare")
, rootLogger = require("log")
, emitter = require("log/lib/emitter")
, registerMaster = require("log/lib/register-master")
, setupVisibility = require("log/lib/setup-visibility")
, setDefaultNamespace = require("log/lib/get-default-namespace").set
, colorsSupportLevel = require("./lib/private/colors-support-level")
, formatMessage = require("./lib/format-event-message")
, levelPrefixes = require("./lib/level-prefixes")
, getNamespacePrefix = require("./lib/get-namespace-prefix");
const formatParts = require("sprintf-kit/format-parts")
, hasAnsi = require("has-ansi")
, { blackBright, red, yellow } = require("cli-color/bare")
, LogWriter = require("log/lib/writer")
, colorsSupportLevel = require("./lib/private/colors-support-level")
, levelPrefixes = require("./lib/level-prefixes")
, getNamespacePrefix = require("./lib/get-namespace-prefix")
, resolveParts = require("./lib/resolve-format-parts");

const WARNING_LEVEL_INDEX = 1, ERROR_LEVEL_INDEX = 0;

const setupPrefixes = levelLogger => {
levelLogger.levelMessagePrefix = levelPrefixes[levelLogger.level];
if (colorsSupportLevel) {
class NodeLogWriter extends LogWriter {
constructor(options = {}) { super(process.env, options); }
setupLevelLogger(logger) {
super.setupLevelLogger(logger);
if (colorsSupportLevel) this.setupLevelMessageDecorator(logger);
}
setupLevelMessageDecorator(levelLogger) {
if (levelLogger.levelIndex === ERROR_LEVEL_INDEX) {
levelLogger.messageContentDecorator = clc.red;
levelLogger.messageContentDecorator = red;
} else if (levelLogger.levelIndex === WARNING_LEVEL_INDEX) {
levelLogger.messageContentDecorator = clc.yellow;
levelLogger.messageContentDecorator = yellow;
}
}
Object.defineProperty(
levelLogger, "namespaceMessagePrefix",
d.gs(function () { return getNamespacePrefix(this); })
);
};

module.exports = (options = {}) => {
if (!isObject(options)) options = {};

// Ensure it's the only log writer initialzed in a process
registerMaster();

if (options.defaultNamespace) setDefaultNamespace(options.defaultNamespace);

// Read logs visiblity settings from env variables
setupVisibility(
process.env.LOG_LEVEL, (process.env.LOG_DEBUG || process.env.DEBUG || "").split(",")
);
resolveMessageTimestamp(event) {
super.resolveMessageTimestamp(event);
if (!colorsSupportLevel) return;
if (event.messageTimestamp) event.messageTimestamp = blackBright(event.messageTimestamp);
}
resolveMessageContent(event) {
const { logger } = event;
const parts = resolveParts(...event.messageTokens);
if (logger.messageContentDecorator) {
parts.literals = parts.literals.map(literal => logger.messageContentDecorator(literal));
for (const substitution of parts.substitutions) {
const { placeholder, value } = substitution;
if (
placeholder.type === "s" &&
placeholder.flags &&
placeholder.flags.includes("#") &&
!hasAnsi(value)
) {
// Raw string
substitution.value = logger.messageContentDecorator(value);
}
}
}
event.messageContent = formatParts(parts);
}
writeMessage(event) { process.stderr.write(`${ event.message }\n`); }
}
NodeLogWriter.levelPrefixes = levelPrefixes;

// Resolve level and namespace log message prefixes
// - for already initialized loggers
rootLogger.getAllInitializedLevels().forEach(setupPrefixes);
// - for loggers to be initialized
emitter.on("init", event => { if (!event.logger.namespace) setupPrefixes(event.logger); });
if (colorsSupportLevel) NodeLogWriter.resolveNamespaceMessagePrefix = getNamespacePrefix;

// Write logs to stderr
emitter.on("log", event => {
if (!event.logger.isEnabled) return;
formatMessage(event);
process.stderr.write(`${ event.message }\n`);
});
};
module.exports = (options = {}) => new NodeLogWriter(options);
47 changes: 0 additions & 47 deletions lib/format-event-message.js

This file was deleted.

8 changes: 0 additions & 8 deletions lib/format.js

This file was deleted.

18 changes: 4 additions & 14 deletions lib/get-namespace-prefix.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,10 @@
"use strict";

const getDefaultNamespace = require("log/lib/get-default-namespace")
, colorsSupportLevel = require("./private/colors-support-level");

const resolveNamespaceString = logger => {
if (!logger.namespace) return null;
const [rootNamespace] = logger.namespaceTokens;
if (getDefaultNamespace() === rootNamespace) {
if (logger.namespace === rootNamespace) return null;
return logger.namespace.slice(rootNamespace.length);
}
return logger.namespace;
};
const { resolveNamespaceMessagePrefix } = require("log/lib/writer")
, colorsSupportLevel = require("./private/colors-support-level");

if (!colorsSupportLevel) {
module.exports = resolveNamespaceString;
module.exports = resolveNamespaceMessagePrefix;
return;
}

Expand Down Expand Up @@ -43,7 +33,7 @@ const assignColor = namespace => {
};

module.exports = logger => {
const namespaceString = resolveNamespaceString(logger);
const namespaceString = resolveNamespaceMessagePrefix(logger);
if (!namespaceString) return null;
const color = (() => {
if (logger.namespaceAnsiColor) return logger.namespaceAnsiColor;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"git-list-updated": "^1.1.2",
"husky": "^1.3.1",
"lint-staged": "^8.1.5",
"log": "^5.0.0",
"log": "^5.1.0",
"nyc": "^13.3.0",
"prettier-elastic": "^1.16.4",
"process-utils": "^2.0.1",
Expand Down
4 changes: 2 additions & 2 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ const resolveUncached = callback => {
try {
return requireUncached(
[
require.resolve("log"), require.resolve("log/lib/private/logger-prototype"),
require.resolve("log"), require.resolve("log/lib/writer"),
require.resolve("log/lib/private/logger-prototype"),
require.resolve("log/lib/emitter"), require.resolve("log/lib/register-master"),
require.resolve("log/lib/setup-visibility"), require.resolve("supports-color"),
require.resolve("../lib/private/colors-support-level"),
require.resolve("../lib/format-event-message"),
require.resolve("../lib/resolve-format-parts"), require.resolve("../")
],
() => {
Expand Down
69 changes: 0 additions & 69 deletions test/lib/format-event-message.js

This file was deleted.

69 changes: 0 additions & 69 deletions test/lib/format.js

This file was deleted.

3 changes: 2 additions & 1 deletion test/lib/get-namespace-prefix/_resolve-uncached.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ module.exports = callback => {
try {
return requireUncached(
[
require.resolve("log"), require.resolve("log/lib/private/logger-prototype"),
require.resolve("log"), require.resolve("log/lib/writer"),
require.resolve("log/lib/private/logger-prototype"),
require.resolve("log/lib/emitter"),
require.resolve("log/lib/get-default-namespace"),
require.resolve("../../../lib/get-namespace-prefix"),
Expand Down

0 comments on commit 7ac81e3

Please sign in to comment.