资讯专栏INFORMATION COLUMN

nodejs 日志插件比较 VS 自定义日志插件

沈建明 / 1901人阅读

摘要:然后把放进去在中在后添加一句日志文件会自动生成在文件夹下面,当天的日志会保存在暂存的里时间请求方式响应状态码响应时长请求路径

morgan

【优点】morgan配置非常简单

【优点】支持自定义日志格式

【优点】支持日志分机

【优点】支持日志压缩:使用rotating-file-stream

【缺点】无法同时往console和文件中写日志

log4js-node

【优点】配置简单

【优点】支持同时往控制台和文件中写数据

【优点】支持按照时间或文件大小分割文件

【优点】支持文件压缩

"use strict";
var path = require("path")
, log4js = require("../lib/log4js");

log4js.configure(
  {
    appenders: [
      {
        type: "file",
        filename: "important-things.log",
        maxLogSize: 10*1024*1024, // = 10Mb
        numBackups: 5, // keep five backup files
        compress: true, // compress the backups
        encoding: "utf-8",
        mode: parseInt("0640", 8),
        flags: "w+"
      },
      {
        type: "dateFile",
        filename: "more-important-things.log",
        pattern: "yyyy-MM-dd-hh",
        compress: true
      },
      {
        type: "stdout"
      }
    ]
  }
);

var logger = log4js.getLogger("things");
logger.debug("This little thing went to market");
logger.info("This little thing stayed at home");
logger.error("This little thing had roast beef");
logger.fatal("This little thing had none");
logger.trace("and this little thing went wee, wee, wee, all the way home.");
winston

没用过,不做评论

fluent-logger-node

往fluntd中写日志,没用过

express-winston

没用过

如何自定义一个日志插件

可以自定义日志结构

日志文件可以用gzip压缩

不影响往console写日志

可以按时间分割日志

支持日志覆盖,最多保留1个月的备份

使用rotating-file-stream

var path = require("path");
var fs = require("fs");
var rfs = require("rotating-file-stream");

var logDirectory = __dirname;

function Wpad(num) {
    return (num > 9 ? "" : "0") + num;
}


/**
 * [Wgenerator 创建文件名函数]
 * @Author   Wdd
 * @DateTime 2017-02-22T10:13:39+0800
 * 日志会保留一个月的:因为日志文件名是只使用日期,9月8号的日志就会覆盖8月8号的日志
 * 文件的格式是gzip
 * 文件名例如:22-log.gizp
 */
function Wgenerator(time, index) {
    if(! time){
        return "temp-log.txt.gzip";
    }

    return "/storage/"+ Wpad(time.getDate()) +"-log.txt.gzip";
}

var accessLogStream = rfs(Wgenerator, {
    interval: "1d", // 周期为1天
    path: logDirectory,
    compress: "gzip" ,
    rotationTime:true
});

/**
 * [exports description]
 * @Author   Wdd
 * @DateTime 2017-02-22T10:24:06+0800
 * 使用方式:
 * 1. 安装rotating-file-stream
 * 2. 在根目录下创建一个文件夹,例如logs。然后把access-log.js放进去
 * 3. 在app.js中var mylog = require("./logs/access-log");
 * 4. 在app = express(); 后添加一句 app.use(mylog);
 * 5. 日志文件会自动生成在./logs/storage文件夹下面,当天的日志会保存在暂存的./logs/temp-log.gzip里
 */
module.exports = function(req, res, next){

    req._startTime = new Date();

    res.once("finish", function(){

        var msg = "";
        //hostname
        msg = process.env.hostname+" ";

        // 时间
        msg += new Date()+" ";

        // 请求方式
        msg += req.method+" ";

        // 响应状态码
        msg += res.statusCode+" ";

        // sessionId
        msg += req.headers.sessionid+" ";

        // 响应时长
        msg += new Date() - req._startTime ;

        // 请求路径
        msg += " " + req.originalUrl +"


";

        accessLogStream.write(msg);
    });

    next();
};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81656.html

相关文章

  • 基于Egg框架的日志链路追踪实践分享

    摘要:项目扩展自定义日志中间件封装好之后,在实际项目应用中我们还需要一步操作,提供了框架扩展功能,包含五项,可以对这几项进行自定义扩展,对于日志因为每次日志记录我们需要记录当前请求携带的做一个链路追踪,需要用到是的请求上下文扩展项。 快速导航 [Logger-Custom] 需求背景 [Logger-Custom] 自定义日志插件开发 [Logger-Custom] 项目扩展 ...

    EscapedDog 评论0 收藏0
  • 一些你所不知道的VS Code插件

    摘要:摘要你所不知道的系列。允许你写入缩写代码并返回的相应标记,目前已经内置,所以不用配置了。自从年双十一正式上线,累计处理了亿错误事件,付费客户有金山软件百姓网等众多品牌企业。摘要: 你所不知道的系列。 原文:提高 JavaScript 开发效率的高级 VSCode 扩展之二! 作者:前端小智 Fundebug经授权转载,版权归原作者所有。 作为一名业余爱好者、专业人员,甚至是每月只有一次编...

    Near_Li 评论0 收藏0
  • 关于k8s集群容器日志收集的总结

    摘要:我推荐你使用进行日志收集,将作为的出口。集群目前暂时没有提供日志查看机制。以如下的形式启动容器,容器日志将发往配置的。 【作者barnett】本文介绍了k8s官方提供的日志收集方法,并介绍了Fluentd日志收集器并与其他产品做了比较。最后介绍了好雨云帮如何对k8s进行改造并使用ZeroMQ以消息的形式将日志传输到统一的日志处理中心。 容器日志存在形式 目前容器日志有两种输出形式: ...

    jeffrey_up 评论0 收藏0

发表评论

0条评论

沈建明

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<