gpt4 book ai didi

playframework - Log4j 自定义配置为每个级别分隔日志 - Playframework 1.2.5

转载 作者:行者123 更新时间:2023-12-04 04:58:48 24 4
gpt4 key购买 nike

每当请求到达时,我都试图将一些用户数据记录到日志文件 log4j玩!框架 1.2.5 .我需要有 2 个单独的日志文件,这些文件将由不同的方法和类使用。我想将我的自定义日志文件格式化为:

date with time - request running time and some string



第一个问题 : 你能给我看一个有用的教程或答案吗?因为到目前为止我所做的一切都是无用的。

第二个问题 : 如何配置 log4j 以记录每个级别,例如仅记录 ERROR一个文件上的消息,而只打印 INFOWARN其他文件上的消息。我的 log4j.properties文件在下面。我知道消息的特权。但即使我定义了阈值为什么 ERROR , FATALWARN消息也写入信息文件?
log4j.rootLogger = ERROR, JUSTINFO, JUSTERROR
log4j.logger = INFO

log4j.appender.JUSTINFO = org.apache.log4j.RollingFileAppender
log4j.appender.JUSTINFO.layout = org.apache.log4j.PatternLayout
log4j.appender.JUSTINFO.layout.ConversionPattern = %d{dd/MM/yyyy HH:mm:ss} - [%X{processTime}] - %m%n
log4j.appender.JUSTINFO.File = log/info.log
log4j.appender.JUSTINFO.Threshold = INFO

log4j.appender.JUSTERROR = org.apache.log4j.RollingFileAppender
log4j.appender.JUSTERROR.layout = org.apache.log4j.PatternLayout
log4j.appender.JUSTERROR.layout.ConversionPattern = %d{dd/MM/yyyy HH:mm:ss} - [%X{processTime}] - %m%n
log4j.appender.JUSTERROR.File =log/warn.log
log4j.appender.JUSTERROR.Threshold = ERROR

最佳答案

您可以使用 NDC(嵌套诊断上下文)或 MDC(映射诊断上下文)。下面是一个调用 Logger 的例子在 Controller 上:

public static StopWatch sw = new StopWatch();

public static void request001() {
sw.start(); // start timer
// logic of processing the request
...
sw.stop(); // stop timer
// using MDC to put elapsed time in milisecond
MDC.put("processTime", sw.getElapsedTime());
Logger.info("this is request001");
}
log4j.properties示例文件应如下所示(使用控制台附加程序):
log4j.rootLogger = INFO, loggerName
log4j.appender.loggerName = org.apache.log4j.ConsoleAppender
log4j.appender.loggerName.layout = org.apache.log4j.PatternLayout
log4j.appender.loggerName.layout.ConversionPattern = %d{dd MMM yyyy HH:mm:ss,SSS} - [%X{processTime}] - %m
%d{dd MMM yyyy HH:mm:ss,SSS}用于输出日期,而 %X{processTime}用于获取 processTime存储在 MDC 中的值。
您可以在此处查看引用资料:
  • Log4j 1.2 Manual
  • PatternLayout JavaDoc
  • What is the difference between Log4j's NDC and MDC facilities?

  • 更新
    阈值属性是表示 最低 接受级别/优先级,而不是绝对级别/优先级。那么,您的 JUSTINFO logger 应该记录优先级从 INFO 开始的记录器或更高。
    如果你想分离日志消息以完全匹配级别(绝对级别范围过滤器),我认为你应该考虑将 log4j.properties 替换为 log4j.xml(使用 xml 配置)。我给你举个例子:
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!-- JUSTINFO logging -->
    <appender name="JUSTINFO" class="org.apache.log4j.FileAppender">
    <param name="File" value="./info.log" />
    <param name="Threshold" value="INFO" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %t - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMin" value="INFO" />
    <param name="LevelMax" value="INFO" />
    </filter>
    </appender>

    <!-- JUSTERROR logging -->
    <appender name="JUSTERROR" class="org.apache.log4j.FileAppender">
    <param name="File" value="./error.log" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %t - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMin" value="ERROR" />
    <param name="LevelMax" value="ERROR" />
    </filter>
    </appender>

    <!-- define root logger priority to ERROR -->
    <root>
    <level value="ERROR"/>
    <appender-ref ref="JUSTINFO"/>
    <appender-ref ref="JUSTERROR"/>
    </root>
    </log4j:configuration>
    这里也给你一个很好的引用:
  • Why chose XML over properties files for Log4J configuration?
  • How to set filter in the log4j.xml
  • 关于playframework - Log4j 自定义配置为每个级别分隔日志 - Playframework 1.2.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402677/

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