首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式创建Log4j 2.x FileAppender

以编程方式创建Log4j 2.x FileAppender
EN

Stack Overflow用户
提问于 2015-10-23 15:07:19
回答 1查看 2.9K关注 0票数 2

我想从Log4j 1.2迁移到2.4。由于我在同一台机器上运行多个程序实例,所以我希望在日志文件中包含一个ID (在下面的代码中称为clientId )。因此,我使用Log4j 1.2的方式以编程方式设置FileAppender:

代码语言:javascript
运行
复制
int clientId = ?// gets set before

FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("logs/client_" + clientId + ".log");
fa.setLayout(new PatternLayout("%d %-5p %c{1} %m%n"));
fa.setThreshold(Level.INFO);
fa.setAppend(true);
fa.activateOptions();
Logger.getRootLogger().addAppender(fa);

我无法实现与Log4j 2.0类似的功能,因为它们取消了直接修改这些属性的能力。相反,我尝试使用CustomConfigurationFactory,就像https://logging.apache.org/log4j/2.x/manual/customconfig.html#Example中描述的那样,但是我无法理解我是如何使用它的?文件说明

这将导致在创建Log4j时将配置自动链接到LoggerContext中。

我试过这样的方法:

代码语言:javascript
运行
复制
LoggerContext context = (LoggerContext) LogManager.getContext(false);
context.getConfiguration(CustomConfigurationFactory.getInstance());

但这不管用。

EN

Stack Overflow用户

发布于 2015-10-23 16:05:35

我自己发现的。我修改了工厂以使用FileAppender:

代码语言:javascript
运行
复制
    builder.setConfigurationName(name);
    builder.setStatusLevel(Level.INFO);
    builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL).
            addAttribute("level", Level.INFO));
    AppenderComponentBuilder appenderBuilder = builder.newAppender("file", "FILE").
            addAttribute("fileName", "log/client_"+Config.CLIENTID+".log");
    appenderBuilder.add(builder.newLayout("PatternLayout").
            addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
    appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY,
            Filter.Result.NEUTRAL).addAttribute("marker", "FLOW"));
    builder.add(appenderBuilder);
    builder.add(builder.newLogger("org.apache.logging.log4j", Level.INFO).
            add(builder.newAppenderRef("file")).
            addAttribute("additivity", false));
    builder.add(builder.newRootLogger(Level.INFO).add(builder.newAppenderRef("file")));
    return builder.build();

然后使用:

代码语言:javascript
运行
复制
ConfigurationFactory.setConfigurationFactory(new CustomConfigurationFactory());
Logger log = LogManager.getLogger(Main.class.getName());

为了得到新的记录器

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33305672

复制
相关文章

相似问题

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