动态地记录每个记录器的文件

时间:2015-11-21 13:57:38

标签: java logging logback

我对loggin有“特殊”要求 - 我需要每个记录器都在单独的文件中。

爪哇

/**
 * Module Dependencies
 */
let cheerio = require('cheerio');
let http = require('http');

class SimplePageGetter {
    constructor(pageLink) {
        this._pageLink = pageLink;
    }

    getPage() {
        http.request(this._pageLink, response => {
            resultsPageHttpGetCallback.call(this, response);
        }).end();
    }
}

function resultsPageHttpGetCallback(response) {
    let pageBody = '';

    response.on('data', chunk => {
        pageBody += chunk;
    });

    //the whole response has been recieved, so we just print it out here
    response.on('end', () => {
        parsePage.call(this, pageBody);
    });
}

function parsePage(body) {
    console.log('page parsed');
}

/**
 * Export
 */

module.exports = SimplePageGetter;

然后我希望将Logger log1 = LoggerFactory.getLogger("dynamic.log1"); Logger log2 = LoggerFactory.getLogger("dynamic.log2"); //... 的任何输出写回文件log1,依此类推。是否可以“动态地”创建新的log1.log,就像使用logback一样?

可以使用其他一些日志框架来解决这个用例吗?

我可以手动配置appender,但这是我想要避免的。就像每次添加appender记录器一样,会相应地创建新的appender /文件。

修改

我实现了自定义鉴别器:

dynamic

然后我的appender配置看起来像这样:

public class LoggerBasedDiscriminator extends AbstractDiscriminator<ILoggingEvent> {
    private static final String LOGGER_NAME = "loggerName";
    @Override
    public String getDiscriminatingValue(ILoggingEvent e) {
        return e.getLoggerName();
    }
    @Override
    public String getKey() {
        return LOGGER_NAME;
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用SiftingAppender

这样你就有了一个可以动态地将日志分成不同文件的appender。