Używam org.apache.log4j.Logger i ja często zobaczyć linie w moim dzienniku, które wyglądają tak:Getting wiele dzienników w jednej linii z log4j
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
Czego spodziewać się:
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
Oznacza to, że z wieloma liniami logowanymi w jednym wierszu i nadpisanymi informacjami dziennika. Nie mam pojęcia, co robię źle, więc chciałbym wiedzieć (A), czy to coś oczywistego, czy (B) jakiekolwiek wskazówki, które mogą mi pomóc rozwiązać ten problem.
Moja klasa rejestrator wygląda następująco:
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);
}
}
}
którego używam tak:
private CallsLogger callsLogger;
/* ... */
myLogger.info(String.format("%s\t%s\t%s\t%s", "data", "data", "data", "data"));
mam zalogowaniu ~ 40,000 imprez dziennie, a około 200 z nich malformed linie, z dowolnymi od 2 do 11 osobnych wydarzeń w linii.
Moja log4j.xml wygląda to liks:
<?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>
Każda pomoc mile widziana.
myLogger.info (string.Format ("% s \ t% s \ t% s \ t% S", "dane", "dane" , "dane", "dane" + "\ n")); spróbuj tego –
@shreyanshjogi Nowa linia jest już we wzorze rejestrowania ('% n'). – Jonathan
może to być problem z buforowaniem i równoległym dostępem do programu rejestrującego, spróbuj wymusić wypalanie rejestru po każdej operacji dziennika, dodając: w znaczniku nadawcy –
gawi