gpt4 book ai didi

java - Perf4j 未正确记录

转载 作者:行者123 更新时间:2023-12-01 16:05:50 26 4
gpt4 key购买 nike

我在代码中设置了一些秒表调用来测量一些代码块,并且所有消息都进入我的主日志而不是计时日志。 perfStats.log 文件创建得很好,但所有消息都转到根日志,根据我读过的文档,我认为这不应该发生。我在这里遗漏了一些明显的东西吗?

perf4j 教程 link

示例代码

import org.apache.log4j.Logger;
import org.perf4j.LoggingStopWatch;
import org.perf4j.StopWatch;

public class PerfLogger {

/**
* @param args
*/
public static void main(String[] args)
{
Logger logger = Logger.getLogger(PerfLogger.class.getName());

logger.info("Starting perf log test");

StopWatch stopWatch = new LoggingStopWatch("test time");

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stopWatch.stop();

}

}

示例 log4j.xml

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>    

<appender name="STDOUT-DEBUG" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%t]%x %M (%F:%L) - %m%n"/>
</layout>
</appender>


<!-- Perf4J appenders -->
<!--
This AsyncCoalescingStatisticsAppender groups StopWatch log messages
into GroupedTimingStatistics messages which it sends on the
file appender defined below
-->
<appender name="CoalescingStatistics"
class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
<!--
The TimeSlice option is used to determine the time window for which
all received StopWatch logs are aggregated to create a single
GroupedTimingStatistics log. Here we set it to 10 seconds, overriding
the default of 30000 ms
-->
<param name="TimeSlice" value="10000"/>
<appender-ref ref="fileAppender"/>
</appender>


<!-- This file appender is used to output aggregated performance statistics -->
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="perfStats.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>

<!-- Loggers -->
<!--
The Perf4J logger. Note that org.perf4j.TimingLogger is the value of the
org.perf4j.StopWatch.DEFAULT_LOGGER_NAME constant. Also, note that
additivity is set to false, which is usually what is desired - this means
that timing statements will only be sent to this logger and NOT to
upstream loggers.
-->
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="CoalescingStatistics"/>
</logger>

<root>
<priority value="info"/>
<appender-ref ref="STDOUT-DEBUG"/>
</root>

</log4j:configuration>

最佳答案

我检查了 jar,在 perf4j jar 中没有名为 TimingLogger 的类,这也可以通过 searching their code repository 在这里看到。 ,这可以解释消息没有进入您期望的文件的情况。如果您使用示例中显示的默认 LoggingStopWatch 类,它看起来唯一要做的就是打印到 std err,您可以看到 here 。我尝试更改代码中的记录器以使用其 Log4JStopWatch 类,并将 xml 文件中的记录器更改为 org.perf4j.log4j.Log4JStopWatch 但消息会转到 stdout 而不是文件,即我猜可能是因为它没有使用 log4j.xml 中指定的配置。我将尝试跟进维护该项目的团队,看看他们是否有更新的示例或错误修复。

关于java - Perf4j 未正确记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2645670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com