log4j 2中的%r模式能否与Java应用程序服务器(Payar4.1)结合使用?
我正在试用log4j2来改进我项目中的日志记录。我正在使用一个RollingFile追加器,它每天创建一个日志文件log4j 2中的%r模式能否与Java应用程序服务器(Payar4.1)结合使用?,java,log4j,log4j2,payara,Java,Log4j,Log4j2,Payara,我正在试用log4j2来改进我项目中的日志记录。我正在使用一个RollingFile追加器,它每天创建一个日志文件 <Configuration status="DEBUG"> <Properties> <Property name="log-path">D:/logs/</Property> </Properties> <Appenders> <RollingFile name="RollingFil
<Configuration status="DEBUG">
<Properties>
<Property name="log-path">D:/logs/</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile" fileName="${log-path}/daily.log"
filePattern="${log-path}/daily_%d{yyyy-MM-dd}.log" >
<PatternLayout>
<pattern>%-5level: %d{HH:mm:ss,SSS} - %c{1}::%M - [%X{username}] %m [%r]%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingFile>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%-5level: %d{HH:mm:ss,SSS} - %c{1}::%M - [%X{username}] %m [%r]%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="root" level="debug" additivity="false">
<appender-ref ref="RollingFile" level="debug"/>
</Logger>
<!-- Change logging level below. Accepted values: error, warning, info, debug, trace -->
<Root level="debug" additivity="false">
<AppenderRef ref="RollingFile"/>
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
D:/log/
%-5级别:%d{HH:mm:ss,SSS}-%c{1}::%M-[%X{username}]%M[%r]%n
现在我有一个关于%r模式的问题。这应该表示从构建布局到创建日志事件所经过的毫秒数
当我运行这个程序时,我注意到毫秒数越来越高,只是数量在增加。这与Java应用服务器(在我的例子中是Payara 4.1)重用线程有关
有没有办法解决这个问题,以便我可以获取请求本身的毫秒数?%r表示JVM启动后的毫秒数,不一定是在创建布局时。通过调用ManagementFactory.getRuntimeMXBean().getStartTime()计算该值;创建模式转换器时,然后从每个事件的开始时间值中减去事件时间戳。鉴于开始时间从未改变,该值应随着时间的推移而增长,如您所描述的
Log4j无法获取请求启动的时间。您可以在ThreadContext值中捕获该值,然后创建自己的模式转换器,将该值用作从当前系统时间中减去的值。感谢您将其清除。我按照你的建议做了,减去2个值得到了毫。