2016-02-25 44 views
0

當我從命令行(標準Windows 7)運行我的應用程序時,放入我的日誌文件中的堆棧跟蹤沒有換行符。從命令行運行時,stacktrace中沒有換行符?

(嗯,我想貼的例子,但是當我從我的日誌在記事本中複製堆棧跟蹤並粘貼在我的瀏覽器,新行突然出現)

我也試圖與EditPlus的編輯器中打開日誌,但沒有運氣,堆棧跟蹤沒有換行(進入)。

我的模式佈局是相當標準(log4j2):

<PatternLayout> 
<Pattern>%d [%15.15t] %-5p %-30.30c{3} %10X{username} - %m%n</Pattern> 
</PatternLayout> 

我只是開始我的應用程序JAR(運行的JAR)

java -jar myapp.jar 

當我在日誌蝕蹤跡運行我的應用程序做有新行/進入。

有人知道問題可能出在哪裏?

[編輯] 的4個字符的十六進制表示,對第2行

74 0A 09 61 

線1和最後一個字符的第一個字符它是:

T - something that isn't a newline? - tab? - A 

[編輯]一個簡單的例子與除了log4j2沒有依賴關係:

import java.net.SocketTimeoutException; 

public class App { 
    private org.apache.logging.log4j.Logger log= org.apache.logging.log4j.LogManager.getLogger(App.class); 
    public App() { 
     log.error("0", new SocketTimeoutException("test")); 
     log.debug("starting"); 
     log.debug("starting2"); 
     log.debug("starting3"); 
     log.debug("starting4"); 
     log.debug("starting5"); 
     System.exit(1); 
    } 

    public static void main(String[] args) { 
     new App(); 
    } 
} 

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout> 
       <Pattern>%d [%15.15t] %-5p %-30.30c{3} %10X{username} - %m%n</Pattern> 
      </PatternLayout> 
     </Console> 
     <RandomAccessFile name="MyFile" fileName="client.log"> 
      <PatternLayout> 
       <Pattern>%d [%15.15t] %-5p %-30.30c{3} %10X{username} - %m%n</Pattern> 
      </PatternLayout> 
     </RandomAccessFile> 
    </Appenders> 
    <Loggers> 

     <Logger name="com.tate.world" level="debug" additivity="false"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="MyFile" /> 
     </Logger> 


     <Root level="info"> 
      <AppenderRef ref="Console" /> 
     </Root> 

    </Loggers> 

</Configuration> 

創建一個可運行的罐子,在命令行中運行它:

java -jar test.jar 

現在用記事本打開client.log,該SocketTimeoutException堆棧跟蹤沒有換行。

這是我的MANIFEST.MF:

Manifest-Version: 1.0 
Class-Path: . app_lib/log4j-api-2.4.1.jar ap 
p_lib/log4j-core-2.4.1.jar 
Main-Class: com.tate.world.test.App 

(我也嘗試了最新的2.5) 我怎樣才能換行符(在記事本中顯示)的堆棧跟蹤?

感謝您的閱讀!

[編輯]對於一些很奇怪的,註釋掉:

log.debug("starting2"); 
log.debug("starting3"); 
log.debug("starting4"); 
log.debug("starting5"); 

和命令行再次運行,現在的堆棧跟蹤又有新行!

+0

你的意思是你所有的日誌都附加到同一行嗎? – Berger

+0

@Berger是的,但只有堆棧跟蹤,其他日誌語句都有自己的行。 –

+1

問題不是你的記錄器,問題是格式化棧跟蹤的代碼部分使用普通的'\ n'而不關心當前的操作系統。 – Tom

回答

0

要回答我的問題,一個堆棧跟蹤的默認打印在log4j2被竊聽,有2015年1月創建了一個錯誤報告: https://issues.apache.org/jira/browse/LOG4J2-939

這是沒有biggy。

幸運的是,解決方案非常簡單,只是在模式中包含異常,並且默認打印被無法正確處理換行符的打印機覆蓋。