我一定错过了一些东西,但我现在已经看了几天了,但为什么你会在log4j上使用log4j2(性能除外)?
从我到目前为止看到的,log4j2被宣传为更简单的配置,但它实际上要复杂得多(现在已经三天了,而且我仍然无法在我的主目录中写日志)。自动配置对我来说根本不起作用(或者至少我不能使它工作),配置文件本身在结构上要复杂得多,并且在运行时添加内容以帮助诊断更加困难。
除了性能之外,有没有理由使用log4j2而不是原始的log4j?
答案 0 :(得分:57)
从Log4j 1.x升级到Log4j 2的原因
请注意
log4j-1.2-api
适配器支持Log4j 1.2 API,但依赖Log4j 1.2内部的自定义可能无法正常工作。 升级时的提示
开始使用log4j2时人们遇到的常见问题:
log4j.configurationFile
系统属性指定其路径<Configuration status="trace">
如果您的问题不是上述问题之一,请显示您的配置并提供有关您遇到的问题的更多详细信息。 (不确定您对自动配置的期望,这是一个非常基本的功能,如果log4j2找不到配置文件,则会将ERROR事件记录到控制台。这很少就足够了。)
要写入您的主目录,您可以使用系统属性debug the configuration ${sys:PROPERTYNAME}
。下面是一个示例配置来演示:
<Configuration status="trace">
<Properties>
<Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
<File name="FILE" fileName="${sys:logfile}">
<PatternLayout>
<pattern>%d %p [%t] %c{1.} %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="STDOUT" level="ERROR" />
<AppenderRef ref="FILE" />
</Root>
</Loggers>
</Configuration>
答案 1 :(得分:6)
检查this。简而言之,从链接:
Log4j 2.0介绍:
一个新的插件系统
支持属性
支持基于JSON的配置并自动重新加载其配置。
支持许多现有的日志记录框架,包括SLF4J,Commons Logging,Apache Flume和Log4j 1.x,并提供新的程序员API。
正如你所说,它也快得多。
缺点是:
log4j 2.0与log4j 1.x非常不同,API大多不兼容。
难以设置。
如果您不需要任何新功能,那么使用较旧的Log4j 1.x可能会很好。