java - 使用 log4j 在一行中获取多个日志

标签 java log4j

我正在使用 org.apache.log4j.Logger,我经常在我的日志中看到这样的行:

2013-06-09T00:06:00,092 data data data dat2013-06-09T00:06:10,253 data data2013-06-09T00:06:16,202 data d2013-06-09T00:06:20,750 data data data data

我希望看到的是:

2013-06-09T00:06:00,092 data data data data
2013-06-09T00:06:10,253 data data data data
2013-06-09T00:06:16,202 data data data data
2013-06-09T00:06:20,750 data data data data

即多行日志挤在一行,日志信息被覆盖。我不知道我做错了什么,所以我想知道 (A) 它是否明显或 (B) 任何可以帮助我解决这个问题的指示。

我的记录器类如下所示:

public class MyLogger {
    private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger("com.example.mylog");

    public void info(String info){
        synchronized (log){
            log.info(info);
        }
    }
}

我是这样使用的:

private CallsLogger callsLogger;
/* ... */
myLogger.info(String.format("%s\t%s\t%s\t%s", "data", "data", "data", "data"));

我每天记录大约 40.000 个事件,其中大约 200 个具有格式错误的行,每行有 2 到 11 个单独的事件。

我的 log4j.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/docs/api/org/apache/log4j/xml/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="mylog" class="org.apache.log4j.rolling.RollingFileAppender">
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="logs/mylog.log.%d.gz"/>
        </rollingPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%d{yyyy-MM-dd'T'HH:mm:ss,SSS}\t%m%n"/>
        </layout>
    </appender>
    <logger name="com.example.mylog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="mylog"/>
    </logger>
    <root>
        <priority value="ERROR"/>
        <appender-ref ref="appender"/>
    </root>
</log4j:configuration>

非常感谢任何帮助。

最佳答案

<param name="ConversionPattern"
               value="%d{yyyy-MM-dd'T'HH:mm:ss,SSS} - %m%n"/>

尝试不使用\t 的上述模式

关于java - 使用 log4j 在一行中获取多个日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042755/

相关文章:

java - 如何在java代码中使用scala.collection.immutable.List数组

java - 线程中出现异常 "main"java.lang.NoClassDefFoundError : kotlin/KotlinPackage & Caused by: java. lang.ClassNotFoundException : kotlin. KotlinPackage

tomcat - Grails + log4j :ERROR WARNING: Exception occured configuring log4j logging: No such property: delegate for class: java. lang.String

java - 如何仅将 LoggerMarker 记录到特定文件?

java - Log4j2 自定义附加程序 : ERROR Attempted to append to non-started appender

java - 使用 JAXB 处理 REST 调用 xml 响应

java - 在 Java 中 Ping 多台服务器

java - Java中 "for"语句每次循环都计算循环条件吗?

java - 如何更改外部 jar 中的类的调试级别

java - 如何在多线程应用程序关闭时摆脱有关 "no appenders"的 log4j 消息警告?