2013-07-01 76 views
1

我需要为我的应用程序中的不同对象实例创建单独的日志。例如,如果我们使用书籍,我需要为每本书分开一个日志文件。它可以很好地处理log4j2.xml文件,但是我可能在内存中有数百个这样的对象,而且我不想创建如此长的配置文件。我想从代码创建appender和logger。我查找了工作代码示例,但什么也没找到。如何从java代码创建log4j2 appender?

我试图使用RollingFileAppender.createAppender,但没有找到如何将它附加到记录器,并未能得到适当的值,这个函数参数。 请帮助工作代码\配置如何为每个对象属性创建单独的日志文件。

大概可以用log4j2.xml中的appender \ logger名称中的通配符或使用渲染器来完成?

+0

重复:http://stackoverflow.com/questions/8965946/configuring-log4j-loggers-programmatically – nif

+0

没有。在那个问题他们不处理log4j2 – YuriR

回答

0

您可以在org.apache.logging.log4j.core.config.Configurator中使用静态方法#initialize(String contextName, ClassLoader loader, String configLocation)(请参阅源here)。 (您可以为类加载器传递null)

注意,这个类不是公共API的一部分,所以你的代码可与任何次要版本打破。

+0

它做了这个工作,10倍! – YuriR

1

如果在“book”上拆分日志文件是您正在寻找的内容,而不是创建一个非常特定的appender或以编程方式配置log4j来处理该问题,那么您应该查看一下MDC。

通过适当的MDC设置,它应该是直着分裂登录MDC内容文件的基础(例如,在的logback,有SiftingAppender。我相信有类似的第三方追加程序做同样的事情)

+0

嗨艾德里安。我没有成功在我的项目中使用MDC,我稍后再试。不管怎样,谢谢你。 – YuriR

+1

Log4j-2.0相当于RoutingAppender。好的建议,阿德里安! –