@antora/logger
Advanced tools
Comparing version 3.0.0-alpha.6 to 3.0.0-alpha.7
'use strict' | ||
const { posix: path } = require('path') | ||
const { EventEmitter, once } = require('events') | ||
const expandPath = require('@antora/expand-path-helper') | ||
const fs = require('fs') | ||
const ospath = require('path') | ||
const { posix: path } = ospath | ||
const { | ||
destination: buildDest, | ||
levels: { labels: levelLabels, values: levelValues }, | ||
symbols: { streamSym }, | ||
pino, | ||
} = require('pino') | ||
const closedLogger = { closed: true } | ||
const finalizers = [] | ||
const INF = Infinity | ||
const minLevel = levelLabels[Math.min.apply(null, Object.keys(levelLabels))] | ||
const noopLogger = pino({ base: null, enabled: false, timestamp: false }, {}) | ||
const rootLoggerHolder = new Map() | ||
const standardStreams = { 1: 'stdout', 2: 'stderr', stderr: 2, stdout: 1 } | ||
function close () { | ||
if (rootLoggerHolder.has()) rootLoggerHolder.get().closed = true | ||
const rootLogger = rootLoggerHolder.get() || closedLogger | ||
if (rootLogger.closed) return | ||
const strm = Object.assign(rootLogger, closedLogger)[streamSym] | ||
if (strm instanceof EventEmitter && typeof strm.end === 'function' && (strm._buf || !(strm.fd in standardStreams))) { | ||
const waitForClose = once(strm, 'close').catch(() => undefined) | ||
strm.end() | ||
finalizers.push(waitForClose) | ||
} | ||
} | ||
function configure ({ level = 'info', failureLevel = 'silent', format = 'structured', destination } = {}) { | ||
if (level === 'silent' && failureLevel === 'silent' && (rootLoggerHolder.get() || {}).noop) return module.exports | ||
function configure ({ name, level = 'info', levelFormat, failureLevel = 'silent', format, destination } = {}, baseDir) { | ||
const silent = (levelValues[level] || (level === 'all' ? (level = minLevel) : INF)) === INF | ||
if (silent && (levelValues[failureLevel] || INF) === INF && (rootLoggerHolder.get() || {}).noop) return module.exports | ||
close() | ||
const prettyPrint = format === 'pretty' | ||
if (level === 'all') level = minLevel | ||
if (failureLevel === 'all') failureLevel = minLevel | ||
let colorize, dest | ||
if (!(silent || typeof (destination || (destination = {})).write === 'function')) { | ||
const { file, append = true, bufferSize, ...destOpts } = destination | ||
if (bufferSize != null) destOpts.minLength = bufferSize | ||
if (file && !(dest = standardStreams[file])) { | ||
dest = expandPath(file, '~+', baseDir) | ||
try { | ||
fs.mkdirSync(ospath.dirname(dest), { recursive: true }) | ||
if (!append) fs.unlinkSync(dest) | ||
} catch {} | ||
} else if (process.env.NODE_ENV !== 'test') { | ||
colorize = true | ||
} | ||
destination = buildDest(prettyPrint ? dest || 2 : Object.assign({ sync: true }, destOpts, { dest: dest || 1 })) | ||
} | ||
const logger = addFailOnExitHooks( | ||
level === 'silent' | ||
silent | ||
? Object.assign(Object.create(Object.getPrototypeOf(noopLogger)), noopLogger) | ||
: pino( | ||
{ | ||
name: 'antora', | ||
name, | ||
base: {}, | ||
level, | ||
formatters: { level: (level) => ({ level }) }, | ||
formatters: { level: levelFormat === 'number' ? (_, level) => ({ level }) : (level) => ({ level }) }, | ||
hooks: { | ||
@@ -73,7 +103,8 @@ // NOTE logMethod only called if log level is enabled | ||
}, | ||
suppressFlushSyncWarning: true, | ||
translateTime: 'SYS:HH:MM:ss.l', // Q: do we really need ms? should we honor DATE_FORMAT env var? | ||
...(process.env.NODE_ENV === 'test' && { colorize: false }), | ||
...(colorize ? undefined : { colorize: false }), | ||
}, | ||
}, | ||
destination || buildDest(prettyPrint ? 2 : 1) | ||
destination | ||
), | ||
@@ -90,4 +121,4 @@ failureLevel | ||
resolveTarget () { | ||
if ((this.ownRootLogger || { closed: true }).closed) { | ||
if ((this.ownRootLogger = rootLoggerHolder.get()).closed) { | ||
if ((this.ownRootLogger || closedLogger).closed) { | ||
if ((this.ownRootLogger = rootLoggerHolder.get() || closedLogger).closed) { | ||
;(this.ownRootLogger = configure().get(null)).warn( | ||
@@ -113,3 +144,3 @@ 'logger not configured; creating logger with default settings' | ||
close() | ||
return Promise.resolve((rootLoggerHolder.get() || {}).failOnExit) | ||
return Promise.all(finalizers.splice(0, finalizers.length)).then(() => (rootLoggerHolder.get() || {}).failOnExit) | ||
} | ||
@@ -137,3 +168,3 @@ | ||
} else { | ||
logger.failureLevelVal = failureLevelVal = levelValues[failureLevel] || Infinity | ||
logger.failureLevelVal = failureLevelVal = levelValues[failureLevel] || INF | ||
Object.defineProperty(logger, 'failureLevel', { | ||
@@ -154,8 +185,9 @@ enumerable: true, | ||
get () { | ||
return this.levelVal === Infinity && this.failureLevelVal === Infinity | ||
return this.levelVal === INF && this.failureLevelVal === INF | ||
}, | ||
}) | ||
if (failureLevelVal === Infinity) return logger | ||
for (const [levelName, levelVal] of Object.entries(levelValues)) { | ||
if (levelVal >= failureLevelVal) logger[levelName] = decorateWithSetFailOnExit(logger[levelName]) | ||
if (failureLevelVal !== INF) { | ||
for (const [levelName, levelVal] of Object.entries(levelValues)) { | ||
if (levelVal >= failureLevelVal) logger[levelName] = decorateWithSetFailOnExit(logger[levelName]) | ||
} | ||
} | ||
@@ -162,0 +194,0 @@ return logger |
{ | ||
"name": "@antora/logger", | ||
"version": "3.0.0-alpha.6", | ||
"version": "3.0.0-alpha.7", | ||
"description": "The logger for Antora.", | ||
@@ -18,4 +18,5 @@ "license": "MPL-2.0", | ||
"dependencies": { | ||
"@antora/expand-path-helper": "~1.0", | ||
"pino": "~6.11", | ||
"pino-pretty": "~4.8" | ||
"pino-pretty": "~5.1" | ||
}, | ||
@@ -37,3 +38,3 @@ "engines": { | ||
], | ||
"gitHead": "38ec002e88eede3ce5c401a6e226d1a0356945c5" | ||
"gitHead": "fbd597b3680474f2083cda8a7facf1e2848c08e0" | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
27312
221
3
3
+ Added@antora/expand-path-helper@1.0.0(transitive)
+ Addedjoycon@3.1.1(transitive)
+ Addedpino-pretty@5.1.3(transitive)
- Removedjoycon@2.2.5(transitive)
- Removedpino-pretty@4.8.0(transitive)
Updatedpino-pretty@~5.1