gpt4 book ai didi

javascript - nodejs 将行号添加到基于 winston 的记录器

转载 作者:行者123 更新时间:2023-11-30 06:25:25 35 4
gpt4 key购买 nike

如何向以下基于 winston 的记录器添加行号?使行号出现在文件路径的末尾。

const winston = require('winston');

winston.emitErrs = true;
const logger = function (module) {
let parts, path;
parts = module.filename.split('\\');
path = parts[parts.length - 2] + '\\' + parts.pop();
return new winston.Logger({
transports: [
new winston.transports.Console({
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
label: path,
timestamp: true
})
],
exitOnError: false
});
};
module.exports = logger;

更新

当前输出示例如下:2018-06-10T00:13:33.344Z - 信息:[app\main.js] 这是我的日志

所需的格式是:2018-06-10T00:13:33.344Z - 信息:[app\main.js:150] 这是我的日志其中 150 附加到文件路径。

最佳答案

您可以在新文件 winston.js 中使用此代码。并通过在任何地方要求它来使用它。

var winston = require('winston')
var path = require('path')
var PROJECT_ROOT = path.join(__dirname, '..')
var appRoot = require('app-root-path');


const options = {
file: {
level: 'info',
filename: `${appRoot}/logs/app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: false,
timestamp: true
},
console: {
level: 'debug',
handleExceptions: true,
json: true,
colorize: true,
timestamp: true
}
};

var logger = new winston.Logger({
transports: [
new winston.transports.File(options.file),
new winston.transports.Console(options.console)
],
exitOnError: false // do not exit on handled exceptions
});

logger.stream = {
write: function (message) {
logger.info(message)
}
}

// A custom logger interface that wraps winston, making it easy to instrument
// code and still possible to replace winston in the future.

module.exports.debug = module.exports.log = function () {
logger.debug.apply(logger, formatLogArguments(arguments))
}

module.exports.info = function () {
logger.info.apply(logger, formatLogArguments(arguments))
}

module.exports.warn = function () {
logger.warn.apply(logger, formatLogArguments(arguments))
}

module.exports.error = function () {
logger.error.apply(logger, formatLogArguments(arguments))
}

module.exports.stream = logger.stream

/**
* Attempts to add file and line number info to the given log arguments.
*/
function formatLogArguments (args) {
args = Array.prototype.slice.call(args)

var stackInfo = getStackInfo(1)

if (stackInfo) {
// get file path relative to project root
var calleeStr = '(' + stackInfo.relativePath + ':' + stackInfo.line + ')'

if (typeof (args[0]) === 'string') {
args[0] = calleeStr + ' ' + args[0]
} else {
args.unshift(calleeStr)
}
}

return args
}

/**
* Parses and returns info about the call stack at the given index.
*/
function getStackInfo (stackIndex) {
// get call stack, and analyze it
// get all file, method, and line numbers
var stacklist = (new Error()).stack.split('\n').slice(3)

// stack trace format:
// http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
// do not remove the regex expresses to outside of this method (due to a BUG in node.js)
var stackReg = /at\s+(.*)\s+\((.*):(\d*):(\d*)\)/gi
var stackReg2 = /at\s+()(.*):(\d*):(\d*)/gi

var s = stacklist[stackIndex] || stacklist[0]
var sp = stackReg.exec(s) || stackReg2.exec(s)

if (sp && sp.length === 5) {
return {
method: sp[1],
relativePath: path.relative(PROJECT_ROOT, sp[2]),
line: sp[3],
pos: sp[4],
file: path.basename(sp[2]),
stack: stacklist.join('\n')
}
}
}

关于javascript - nodejs 将行号添加到基于 winston 的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50779459/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com