kafkajs
Version:
A modern Apache Kafka client for node.js
69 lines (59 loc) • 1.75 kB
JavaScript
const { assign } = Object
const LEVELS = {
NOTHING: 0,
ERROR: 1,
WARN: 2,
INFO: 4,
DEBUG: 5,
}
const createLevel = (label, level, currentLevel, namespace, logFunction) => (
message,
extra = {}
) => {
if (level > currentLevel()) return
logFunction({
namespace,
level,
label,
log: assign(
{
timestamp: new Date().toISOString(),
logger: 'kafkajs',
message,
},
extra
),
})
}
const evaluateLogLevel = logLevel => {
const envLogLevel = (process.env.KAFKAJS_LOG_LEVEL || '').toUpperCase()
return LEVELS[envLogLevel] == null ? logLevel : LEVELS[envLogLevel]
}
const createLogger = ({ level = LEVELS.INFO, logCreator } = {}) => {
let logLevel = evaluateLogLevel(level)
const logFunction = logCreator(logLevel)
const createNamespace = (namespace, logLevel = null) => {
const namespaceLogLevel = evaluateLogLevel(logLevel)
return createLogFunctions(namespace, namespaceLogLevel)
}
const createLogFunctions = (namespace, namespaceLogLevel = null) => {
const currentLogLevel = () => (namespaceLogLevel == null ? logLevel : namespaceLogLevel)
const logger = {
info: createLevel('INFO', LEVELS.INFO, currentLogLevel, namespace, logFunction),
error: createLevel('ERROR', LEVELS.ERROR, currentLogLevel, namespace, logFunction),
warn: createLevel('WARN', LEVELS.WARN, currentLogLevel, namespace, logFunction),
debug: createLevel('DEBUG', LEVELS.DEBUG, currentLogLevel, namespace, logFunction),
}
return assign(logger, {
namespace: createNamespace,
setLogLevel: newLevel => {
logLevel = newLevel
},
})
}
return createLogFunctions()
}
module.exports = {
LEVELS,
createLogger,
}