當我從命令行(標準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");
和命令行再次運行,現在的堆棧跟蹤又有新行!
你的意思是你所有的日誌都附加到同一行嗎? – Berger
@Berger是的,但只有堆棧跟蹤,其他日誌語句都有自己的行。 –
問題不是你的記錄器,問題是格式化棧跟蹤的代碼部分使用普通的'\ n'而不關心當前的操作系統。 – Tom