2013-06-11 43 views
6

Tôi đang sử dụng org.apache.log4j.Logger và tôi thường xuyên nhìn thấy dòng trong nhật ký của tôi trông như thế này:Bắt nhiều bản ghi trên một dòng với 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 

Những gì tôi mong đợi để xem là:

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 

Tức là, với nhiều dòng nhật ký được ghép lại với nhau trên một dòng và thông tin nhật ký bị ghi đè. Tôi không biết tôi đang làm gì sai, vì vậy tôi muốn biết (A) nếu nó là một cái gì đó rõ ràng hoặc (B) bất kỳ con trỏ có thể giúp tôi giải quyết điều này.

lớp logger của tôi trông như thế này:

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); 
     } 
    } 
} 

Mà tôi sử dụng như thế này:

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

Tôi đang đăng nhập ~ 40.000 sự kiện mỗi ngày, và dòng khoảng 200 trong số này đã bị thay đổi, với bất kỳ thứ gì từ 2 đến 11 sự kiện riêng biệt trên mỗi dòng.

log4j.xml My trông liks này:

<?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> 

Bất kỳ trợ giúp đánh giá rất cao.

+0

myLogger.info (String.format ("% s \ t% s \ t% s \ t% s", "dữ liệu", "dữ liệu" , "dữ liệu", "dữ liệu" + "\ n")); thử này –

+1

@shreyanshjogi Dòng mới đã có trong mẫu ghi nhật ký ('% n'). – Jonathan

+1

nó có thể là một vấn đề với đệm và truy cập song song với một logger, cố gắng để buộc các logger tuôn ra sau mỗi hoạt động đăng nhập bằng cách thêm: trong thẻ appender – gawi

Trả lời

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

Hãy thử mô hình trên mà không \ t

HOẶC

+0

hoặc nếu bạn cần tab thay thế \ t bằng và thử. Theo tôi% t được sử dụng để hiển thị tên luồng –

0

Sử dụng một lớp học như

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

Điều này sẽ loại bỏ tất cả \ n từ chuỗi để được đăng nhập và sau đó thêm một ở cuối dòng.

Và trong log4j cấu hình xml sử dụng:

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
... 
<layout class="....MyPatternLayout"> 
... 
</layout> 
</appender> 
Các vấn đề liên quan