node.js日志封装

复制代码
var log4js = require("log4js");

function init(_log_filepath, _log_filename) {
    let logfile = _log_filepath + "/" + _log_filename + ".log";
    let logfile_error = _log_filepath + "/" + _log_filename + ".error.log";
    let layout = {
        type: "pattern",
        pattern: "[%d{yyyy-MM-dd hh:mm:ss.SSS}] [%p] %m",
    };

    log4js.configure({
        appenders: {
            console: {
                type: "console",
                layout: layout,
            },
            file: {
                // file只是个标识字符串,可以是任意
                type: "fileSync",
                filename: logfile,
                maxLogSize: 10 * 1024 * 1024, // 10MB
                backups: 10,
                layout: layout,
            },
            file_error: {
                type: "fileSync",
                filename: logfile_error,
                maxLogSize: 1024 * 1024, // 10MB
                backups: 5,
                layout: layout,
            },
        },
        categories: {
            default: { appenders: ["file", "console"], level: "trace" },
            curstom_error: { appenders: ["file_error"], level: "warn" },
        },
    });

    var logger = log4js.getLogger("");
    var logger_curstom_error = log4js.getLogger("curstom_error");

    //===============================================================
    // Logger
    // 封装参考:https://stackoverflow.com/questions/56097580/override-console-logerror-with-winston-no-longer-working/56098264

    // v1
    //     console.trace = (...args) => logger.trace.call(logger, ...args);
    //     console.debug = (...args) => logger.debug.call(logger, ...args);
    //     console.info = (...args) => logger.info.call(logger, ...args);
    //     console.log = (...args) => logger.info.call(logger, ...args);
    //     console.warn = (...args) => logger.warn.call(logger, ...args);
    //     console.error = (...args) => logger.error.call(logger, ...args);

    // v2
    console.trace = function (...args) {
        logger_curstom_error.trace.call(logger_curstom_error, ...args);
        return logger.trace.call(logger, ...args);
    };
    console.debug = function (...args) {
        logger_curstom_error.debug.call(logger_curstom_error, ...args);
        return logger.debug.call(logger, ...args);
    };
    console.info = function (...args) {
        logger_curstom_error.info.call(logger_curstom_error, ...args);
        return logger.info.call(logger, ...args);
    };
    console.log = function (...args) {
        logger_curstom_error.info.call(logger_curstom_error, ...args);
        return logger.info.call(logger, ...args);
    };
    console.warn = function (...args) {
        logger_curstom_error.warn.call(logger_curstom_error, ...args);
        return logger.warn.call(logger, ...args);
    };
    console.error = function (...args) {
        logger_curstom_error.error.call(logger_curstom_error, ...args);
        return logger.error.call(logger, ...args);
    };
}

module.exports = {
    init: init,
};
复制代码

 

使用:

var logwrap = require("./util/logwrap.js");
let filename = __filename.slice(__dirname.length + 1);
logwrap.init("./bin", filename);
 
后面可以正常的console.log,console.error了
 
 
 
github项目weiqi_picture_spider(私)

 

posted on   拥剑公子  阅读(161)  评论(0编辑  收藏  举报

编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示