首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js中的日志循环?

Node.js中的日志循环?
EN

Stack Overflow用户
提问于 2013-08-05 18:29:14
回答 3查看 24.7K关注 0票数 21

在我的网页分析中,我将数据记录在纯文本文件中。我想每天轮换日志,因为它记录了太多的数据。目前,我使用bunyan来轮换日志。

我正面临的问题

它正确地旋转了文件,但旋转后的日志文件的名称为log.0log.1等。我希望文件名为log.05-08-2013log.04-08-2013

我不能编辑bunyan包的源代码,因为我们正在通过NPM使用package.json安装模块。

所以我的问题是-在Node.js中有没有其他符合我要求的日志轮换?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-08 16:04:11

Winston 不支持使用文件名中的日期进行日志轮换。看看this pull request,它添加了这一功能,并于四个月前合并。不幸的是,该网站上没有列出文档,但还有另一个pull request正在等待修复。基于该文档和对日志轮换功能的测试,您应该能够将其添加为新的传输,以启用日志轮换功能。类似于以下内容:

代码语言:javascript
复制
winston.add(winston.transports.DailyRotateFile, {
  filename: './logs/my.log',
  datePattern: '.dd-MM-yyyy'
});
票数 47
EN

Stack Overflow用户

发布于 2014-05-18 18:47:03

如果除了按日期保存日志之外,您还想添加logrotate (例如,删除超过一周的日志),可以添加以下代码:

代码语言:javascript
复制
var fs = require('fs');
var path = require("path");
var CronJob = require('cron').CronJob;
var _ = require("lodash");
var logger = require("./logger");

var job = new CronJob('00 00 00 * *', function(){
    // Runs every day
    // at 00:00:00 AM.
    fs.readdir(path.join("/var", "log", "ironbeast"), function(err, files){
        if(err){
            logger.error("error reading log files");
        } else{
            var currentTime = new Date();
            var weekFromNow = currentTime -
                (new Date().getTime() - (7 * 24 * 60 * 60 * 1000));
            _(files).forEach(function(file){
                var fileDate = file.split(".")[2]; // get the date from the file name
                if(fileDate){
                    fileDate = fileDate.replace(/-/g,"/");
                    var fileTime = new Date(fileDate);
                    if((currentTime - fileTime) > weekFromNow){
                        console.log("delete fIle",file);
                        fs.unlink(path.join("/var", "log", "ironbeast", file),
                            function (err) {
                                if (err) {
                                    logger.error(err);
                                }
                                logger.info("deleted log file: " + file);
                            });
                    }
                }
            });
        }
    });
}, function () {
    // This function is executed when the job stops
    console.log("finished logrotate");
},
true, /* Start the job right now */
'Asia/Jerusalem' /* Time zone of this job. */
);

其中我的记录器文件是:

代码语言:javascript
复制
var path = require("path");
var winston = require('winston');

var logger = new winston.Logger({
transports: [
    new winston.transports.DailyRotateFile({
        name: 'file#info',
        level: 'info',
        filename: path.join("/var", "log", "MY-APP-LOGS", "main.log"),
        datePattern: '.MM--dd-yyyy'
    }),
    new winston.transports.DailyRotateFile({
        name: 'file#error',
        level: 'error',
        filename: path.join("/var", "log", "MY-APP-LOGS", "error.log"),
        datePattern: '.MM--dd-yyyy',
        handleExceptions: true
    })
]});

module.exports = logger;
票数 5
EN

Stack Overflow用户

发布于 2016-05-21 18:30:25

有一个用于日志轮换的logrotator模块,无论日志记录机制如何,您都可以使用它。

您可以指定format选项来格式化日期格式(或任何其他格式)

代码语言:javascript
复制
var logrotate = require('logrotator');

// use the global rotator
var rotator = logrotate.rotator;

// or create a new instance
// var rotator = logrotate.create();

// check file rotation every 5 minutes, and rotate the file if its size exceeds 10 mb.
// keep only 3 rotated files and compress (gzip) them.
rotator.register('/var/log/myfile.log', {
  schedule: '5m', 
  size: '10m', 
  compress: true, 
  count: 3, 
  format: function(index) {
    var d = new Date();
    return d.getDate()+"-"+d.getMonth()+"-"+d.getFullYear();
  }
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18055971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档