7

私は 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

つまり、複数のログ行が 1 行に詰め込まれ、ログ情報が上書きされます。私は自分が何を間違っているのかわからないので、(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"));

私は 1 日あたり ~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>

どんな助けでも大歓迎です。

4

2 に答える 2

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

\t なしで上記のパターンを試してください

また

于 2013-06-11T11:49:22.953 に答える
1

のようなクラスを使用します

public class MyPatternLayout extends PatternLayout {
...
public String format(LoggingEvent pEvent) {
    return super.format(pEvent).replace('\n', ' ') + '\n';
}
...

これにより、ログに記録される文字列からすべての \n が削除され、行末に 1 つ追加されます。

そして、log4j config xml で次を使用します。

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
...
<layout class="....MyPatternLayout">
...
</layout>
</appender>
于 2013-10-01T10:37:43.253 に答える