在我的网站分析中,我将数据记录在纯文本文件中.我想每天轮换日志,因为它记录了太多的数据.目前我正在使用bunyan来旋转日志.
我面临的问题
它正确地旋转文件,但是旋转的日志文件在名称log.0中log.1,等等.我想要文件名log.05-08-2013,log.04-08-2013
我无法编辑bunyan包的来源,因为我们正在使用package.jsonvia NPM 安装模块.
所以我的问题是 - Node.js中是否有其他日志轮换符合我的要求?
我正在开发一个带有几十个模块的node.js应用程序,并使用bunyan进行日志记录(JSON输出,多个可配置流).我一直在寻找如何在所有模块中实现实例的很好的例子,但是还没有看到我可以从中学到的一个非常干净的例子.
下面说明了一种有效的方法,但对我来说似乎相当不优雅(丑陋).我一般都是node&commonjs javascript的新手,所以寻找有关如何改进它的建议.
module:./ lib/logger
// load config file (would like this to be passed in to the constructor)
nconf.file({ file: fileConfig});
var logSetting = nconf.get('log');
// instantiate the logger
var Bunyan = require('bunyan');
var log = new Bunyan({
name: logSetting.name,
streams : [
{ stream : process.stdout,
level : logSetting.stdoutLevel},
{ path : logSetting.logfile,
level : logSetting.logfileLevel}
],
serializers : Bunyan.stdSerializers
});
function Logger() {
};
Logger.prototype.info = function info(e) { log.info(e) };
Logger.prototype.debug = function debug(e) { log.debug(e) …Run Code Online (Sandbox Code Playgroud) 设置填充当前请求ID的子bunyan记录器,以及您定义的任何其他参数.
server.use(restify.requestLogger());
Run Code Online (Sandbox Code Playgroud)
注册插件不会记录请求.
我一直在寻找bunyan登录我的nodejs应用程序.我试了一下,一切似乎都很好.我已经跳过了一节的log.child,但现在我想了解如何使用它.我认为它的目的是允许我为日志条目指定一些特殊标识符,以便我可以唯一地标识该日志与其他日志条目的关联方式.
如果是这种情况,我会设想自己log.child在每个请求中使用:
var bunyan = require('bunyan');
var log = bunyan.createLogger({name: 'myapp'});
router.post('/submit', function(req, res) {
var logChild = log.child({reqId: uuid.v4()});
logChild.info({ req:req }, req.user.name + ' has called /submit');
saveData(req)
.then(function(data) {
logChild.info({data: data}, req.user.name + ' has saved to DB successfully in /submit');
res.json({'success': 'Saved!'});
})
.error(function(err) {
logChild.error({ err: err }, req.user.name + ' has caused an error in /submit ');
res.status(500).json("error": err});
});
});
Run Code Online (Sandbox Code Playgroud)
这样,如果用户在30秒范围内BobPOST /submit两次,则会有一些上下文区分日志文件中的两个不同调用. …
我正在开发一个包含多个模块的节点应用程序.我现在正在尝试正确设置日志记录(应该在开始时这样做),并考虑使用Bunyan.
logger如本答案所示,拥有一个导出然后由其他模块所需的单个模块或者logger直接在每个模块中定义一个新的bunyan 实例并相应地配置它会更好吗?为了重复使用,我想象前者,但我不知道这是否会受到限制.
如果我有一个定义的单一记录器
var bunyan = require('bunyan');
var logger = bunyan.createLogger({
name: "filter",
streams: [
{
level: 'info',
stream: process.stdout
},
{
level: 'error',
path: '../error.log'
},
{
level: 'debug',
path: '../debug.log'
}
]
});
module.exports = logger;
Run Code Online (Sandbox Code Playgroud)
然后,使用它的所有模块也将使用名称进行日志记录filter,而每个模块记录到更能代表自身的名称可能更有意义.
另外,我认为所有模块都应该将错误记录到同一个日志文件中,例如systemErr.log(以便更好地概述),还是应该记录到自己的错误日志,例如module1Err.log,module2Err.log?
我碰巧使用 bunyan 来记录数据。我希望日志以适当的颜色打印,例如错误为红色、调试黄色等;不幸的是,我无论如何都找不到这样做。现在我想知道温斯顿是否有可能。我可以在 winston 中更改日志数据的颜色吗?
这是我执行的代码。
var logger = require("winston-color");
var winston = require('winston');
var util = require('util');
var logFilename = __dirname + '/logfile.log';
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)({
filename: 'logfile.log',
timestamp:true
}),
new (winston.transports.File)({
name: 'error-log',
filename: 'error.log',
level: 'error'
}),
new (winston.transports.File)({
name: 'info-log',
filename: 'info.log',
level: 'info'
}),
]
});
logger.info('Hello Winston info!');
logger.debug('Hello Winston debug!');
logger.warn('Hello Winston warn!');
logger.info('Hello again distributed logs');
logger.error('error1');
logger.error('error2');
Run Code Online (Sandbox Code Playgroud)
输出屏幕截图在这里
工作代码的输出在这里
使用Bunyan时,我的所有日志级别都使用相同的青色,如下所示:
这是我们使用的Bunyan配置:
const bunyan = require('bunyan');
module.exports = bunyan.createLogger({name: 'cdt-api-server'});
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何让Bunyan使用红色或洋红色来记录错误信息/堆栈跟踪?问题是红色字符中的"错误"不足以引起我的注意 - 我希望整个堆栈都是红色或洋红色.
这是Bunyan自述文件:https: //github.com/trentm/nodebunbunyan
我只看到一次提到的"颜色".
我们可以这样做吗?
const bunyan = require('bunyan');
module.exports = bunyan.createLogger({
name: 'cdt-api-server',
streams: [
{
level: 'trace',
stream: process.stdout,
color: 'black',
},
{
level: 'debug',
stream: process.stdout,
color: 'blue',
},
{
level: 'info',
stream: process.stdout,
color: 'cyan',
},
{
level: 'error',
path: process.stderr,
color: 'red'
},
{
level: 'warn',
path: process.stderr,
color: 'magenta'
}
]
});
Run Code Online (Sandbox Code Playgroud) Bunyan-node 日志以数字日志级别打印(到标准输出),如 Bunyan 文档中所定义(https://github.com/trentm/node-bunyan#levels)
{ ... , level: 10, .... }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否可以用实际值打印它们-
{ ... , level: "trace", .... }
Run Code Online (Sandbox Code Playgroud)
?
是否有一种传输或机制允许记录到内存结构(如数组),然后偶尔刷新到数据库?
不想对每个日志进行昂贵的数据库调用,因此希望每隔一段时间将日志批量刷新到数据库。
是否有示例或方法使用winston 和bunyan 记录到数组或某种此类结构?
bunyan ×10
node.js ×10
logging ×6
express ×2
javascript ×2
winston ×2
hapijs ×1
log-rotation ×1
restify ×1