I use org.apache.log4j.Logger and I often see lines in my log that look like this:
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
I expect to see the following:
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
That is, with several logical lines, crowded on one line, and recorded log information. I do not know what I'm doing wrong, so I would like to know (A) if this is something obvious or (B) any pointers that can help me solve this problem.
My logger class is as follows:
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); } } }
What I use like this:
private CallsLogger callsLogger; /* ... */ myLogger.info(String.format("%s\t%s\t%s\t%s", "data", "data", "data", "data"));
I log ~ 40,000 events per day, and about 200 of them have invalid lines, with 2 to 11 separate events per line.
My log4j.xml looks like this:
<?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>
Any help is greatly appreciated.