log4j 2中的%r模式能否与Java应用程序服务器(Payar4.1)结合使用?

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

我正在试用log4j2来改进我项目中的日志记录。我正在使用一个RollingFile追加器,它每天创建一个日志文件

<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个值得到了毫。