我真的可以信任LOG4J时间戳作为生产中的性能指标吗? 一种不同的方法

在托管我的Web应用程序的办公室里,LOG4J显示在本地测试的典型操作花费的时间不到1秒,

07 Nov 2019 12:30:01,860 INFO  ParticipantServiceImpl(Line 272) - User 1: Operation Start
...
07 Nov 2019 12:30:02,796 INFO  ParticipantServiceImpl(Line 881) - User 1: Operation End

Production LOG4J显示,由于许多并发用户通过手机连接世界各地,因此平均操作时间接近5-7秒。输出通常是混乱的,而且混乱的,但是我担心时间戳:时间戳本身是否可靠(即使混乱)?在真实的用户体验中确实存在性能问题,还是LOG4J会出现刷新或并发延迟?

07 Nov 2019 12:30:01,860 INFO  ParticipantServiceImpl(Line 272) - User 1: Operation Start
07 Nov 2019 12:31:01,860 INFO  ParticipantServiceImpl(Line 272) - User 2: Operation Start
...
07 Nov 2019 12:37:02,796 INFO  ParticipantServiceImpl(Line 881) - User 1: Operation End

LOG4J配置为

                                   

    <RollingFile name="file" fileName="/local/content/tomcat/app/logs/app.log" append="true"
        filePattern="/local/content/tomcat/app/logs/app.log.%i"> 
        <PatternLayout>
            <Pattern>%d{DATE} %-5p %c{1}(Line %L) - %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicy size="5 MB" />
        </Policies>
        <DefaultRolloverStrategy max="5" />
    </RollingFile>
</Appenders>

<Loggers>    
    <Logger name="com.app" level="debug">
    <AppenderRef ref="console"/>
        <AppenderRef ref="file"/>
    </Logger>

    <Logger name="com.opensymphony.xwork2.interceptor" level="info">
        <AppenderRef ref="file" />
    </Logger>

    <Logger name="org.springframework.orm" level="info">
        <AppenderRef ref="file" />
    </Logger>    

    <Logger name="org.hibernate.engine.transaction" level="DEBUG">
        <AppenderRef ref="console" />
    </Logger>   

    <Logger name="net.sf.ehcache" level="trace">
        <AppenderRef ref="file" />
    </Logger>

    <Root level="info">
      <AppenderRef ref="console"/>
      <AppenderRef ref="file"/>
    </Root>
</Loggers>

shanyecai 回答:我真的可以信任LOG4J时间戳作为生产中的性能指标吗? 一种不同的方法

基于 Log4j 的文档,我认为您可以信任它,但是首先您需要将线程名称添加到附加程序,以便您知道哪个开始时间和结束时间属于哪个线程。

  

属性名称:log4j2.clock

     

环境变量:LOG4J_CLOCK

     

默认值:系统时钟

     

描述:   org.apache.logging.log4j .core.util.Clock接口的实现,该接口用于为日志事件添加时间戳。   默认情况下,在每个日志事件上都会调用System.currentTimeMillis。   您还可以为实现Clock接口的自定义类指定完全限定的类名称。

时间戳不正确的事实告诉我们,这些时间戳不是正在写入的日志的时间戳,而是发生的日志事件的时间戳。

一种不同的方法

我亲自(除了记录开始时间和结束时间-也许根本不记录它们)添加了一个记录事件执行情况的日志事件。这样一来,人类和程序化操作(如果您想收集和分析数据)就更容易阅读。

long startTime = System.currentTimeMillis();
// perfom the task
long endTime = System.currentTimeMillis();
LOG.info("Duration: " + (endTime - startTime)); // you can also convert milliseconds to hours,minutes,secconds
本文链接:https://www.f2er.com/3142635.html

大家都在问