Java Log4jContextSelector的设置属性有什么区别吗
我目前正在探索日志框架log4j2。 我配置了log4j2,但没有设置 Log4jContextSelector 我没有在构建路径中添加干扰器jar 后来在详细阅读文档时,我偶然发现了这句话 不要忘记设置系统属性 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 使所有记录器异步 当我设置这个属性并添加disruptorjar时,我没有看到任何显著的性能改进 我通过在main方法中添加以下行作为第一行来实现这一点Java Log4jContextSelector的设置属性有什么区别吗,java,logging,configuration,performance-testing,log4j2,Java,Logging,Configuration,Performance Testing,Log4j2,我目前正在探索日志框架log4j2。 我配置了log4j2,但没有设置 Log4jContextSelector 我没有在构建路径中添加干扰器jar 后来在详细阅读文档时,我偶然发现了这句话 不要忘记设置系统属性 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 使所有记录器异步 当我设置这个属性并添加disruptorjar时,我没有看到任何显著的性能改进 我通过在main
System.setProperty("Log4jContextSelector",
"org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
我在测试期间生成的日志总量为47.3MB
这让我觉得天气设置这个属性有什么区别吗?
或者在使用Log4j2时默认为异步
我正在使用以下罐子:
1.log4j-api-2.8.2.jar
2.log4j-core-2.8.2.jar
3.干扰器3.2.0.jar
更新:
在log4j2perf中执行benchmark.jar。它开始打印度量。我无法理解如何使用这些指标将其与同步记录器进行比较。默认情况下,Log4j2是同步的。您提到的系统属性的效果是所有记录器都变为异步 你所做的似乎是正确的。您提到您看不到性能是如何受到影响的,但不清楚您是如何衡量这一点的 当您的应用程序有多个线程同时记录大量日志时,或者当您需要以突发方式记录许多消息时,使用Disruptor进行异步日志记录的好处变得更加明显。异步日志记录意味着您的应用程序不需要等待日志消息格式化和I/O完成后再执行其他工作
衡量性能并不容易,但如果您的应用程序需要能够扩展,则值得投入时间。该页面有指向方法和技术以及性能测试代码的链接 默认情况下,Log4j2是同步的。您提到的系统属性的效果是所有记录器都变为异步 你所做的似乎是正确的。您提到您看不到性能是如何受到影响的,但不清楚您是如何衡量这一点的 当您的应用程序有多个线程同时记录大量日志时,或者当您需要以突发方式记录许多消息时,使用Disruptor进行异步日志记录的好处变得更加明显。异步日志记录意味着您的应用程序不需要等待日志消息格式化和I/O完成后再执行其他工作
衡量性能并不容易,但如果您的应用程序需要能够扩展,则值得投入时间。该页面有指向方法和技术以及性能测试代码的链接
Log4j
在调用main方法之前已初始化。
因此,它无法从系统中选择属性Log4jContextSelector
,默认情况下,它是同步工作的
要验证相同性,请执行以下操作:
删除disruptor
依赖项,如果您的项目仍在进行中,那么它就不是异步的
如果您通过添加属性
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
然后在移除干扰器后,项目将不会启动
如果您使用的是tomcat,则在catalina.properties
中添加系统属性。并且不要忘记在调用主方法之前使用immediateFlush=“false”
Log4j
已初始化。
因此,它无法从系统中选择属性Log4jContextSelector
,默认情况下,它是同步工作的
要验证相同性,请执行以下操作:
删除disruptor
依赖项,如果您的项目仍在进行中,那么它就不是异步的
如果您通过添加属性
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
然后在移除干扰器后,项目将不会启动
如果您使用的是tomcat,则在catalina.properties
中添加系统属性。不要忘记使用immediateFlush=“false”