Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >独立日志级

独立日志级
EN

Stack Overflow用户
提问于 2019-01-26 16:30:47
回答 1查看 571关注 0票数 1

我正在寻找的方式,我如何只能发布“信息”级别(为用户)的控制台,和“调试”级别的帖子到文件。目前,我只找到了一个工作解决方案--使用很少的"getLogger()“函数。例如:

  • Log4js.getLogger(“调试”);
  • log4js.getLogger('info');

其中,函数的每个参数将配置的类别与配置()函数分开。但是我不喜欢它,并且假设有一个getLogger()函数有更好的选项。最后一次认为我试过的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    log4js.configure({
    appenders: {
        everything:{ type: 'stdout' },
        file_log: { type: 'file' ,filename: 'all-the-logs.log' },
        logLevelFilter: {  type:'logLevelFilter',level: 'debug', appender: 'file_log' }
    },
    categories: {
       default: {
           appenders: [ 'logLevelFilter','everything'], level: 'info'},
    }
});

我在控制台中看到只有“信息”级别,但在文件中,我也只看到“信息”级别。如果我添加到附录级" all“,我会在控制台中看到所有的级别,并且相同的也会出现在文件中。

EN

回答 1

Stack Overflow用户

发布于 2019-06-17 20:47:59

log4js提供了特殊的附加类型的categoryFilterlogLevelFilter,参见Log4js -评价者,步骤如下

  1. 根据每个日志级别添加附录和类别;
  2. 添加额外的附件类型的logLevelFilter,指向相关的附件;
  3. 在步骤2中使用附加程序更改config.categories.default.appenders
  4. 最后使用log4js.getLogger()创建记录器和到处日志记录,日志文件用爱级分隔。

书写成绩单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {Appender, Configuration, LogLevelFilterAppender} from "log4js";

const fs = require('fs');
const path = require('path');

let levels = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];
let conf: Configuration = {
    appenders : {
        default: {
            type  : "console",
            layout: {
                type   : "colored",
                pattern: "%m"
            },
        }
    },
    categories: {
        default: {
            appenders: levels,
            level    : 'all'
        }
    },
};

let logs = path.join(__dirname, 'logs');
if (!fs.existsSync(logs)) {
    fs.mkdirSync(logs);
}

for (let level of levels) {
    let appender: Appender = {
        type      : "file",
        filename  : path.join(logs, level + '.log'),
        maxLogSize: 65536,
        backups   : 10,
        layout    : {
            type   : "pattern",
            pattern: "%d{dd/MM hh:mm} %-5p %m"
        }
    };
    conf.appenders[level] = appender;
    conf.categories[level] = {
        appenders: [level],
        level    : level.toUpperCase(),
    }
}

let prefix = 'only-';
for (let level of levels) {
    let appender: LogLevelFilterAppender = {
        type    : "logLevelFilter",
        appender: level,
        level   : level,
        maxLevel: level,
    };
    let name = prefix + level;
    conf.appenders[name] = appender;
    conf.categories[name] = {
        appenders: [level],
        level    : level.toUpperCase(),
    }
}
conf.categories.default.appenders = levels.map(x => prefix + x);
//console.log(JSON.stringify(conf, null, 2));
export default conf;

样本使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// const log4js = require('log4js');
import * as log4js from 'log4js';
import log4jsConfig from './log4js.config';

log4js.configure(log4jsConfig );

(function () {
    const logger = log4js.getLogger();
    logger.trace('Entering cheese testing');
    logger.debug('Got cheese.');
    logger.info('Cheese is Gouda.');
    logger.warn('Cheese is quite smelly.');
    logger.error('Cheese is too ripe!');
    logger.fatal('Cheese was breeding ground for listeria.');

    log4js.shutdown(console.log);
})();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54384094

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文