Getting multiple logs on one line using log4j

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.

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

Try the above pattern without \ t

OR

0
source

Use a class like

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

This will remove all \ n from the line for writing, and then add it to the end of the line.

And in log4j config xml use:

 <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> ... <layout class="....MyPatternLayout"> ... </layout> </appender> 
0
source

Source: https://habr.com/ru/post/947023/


All Articles