1. 程式人生 > >windows c++ log4cxx 輸出控制檯 中文異常 問題解決

windows c++ log4cxx 輸出控制檯 中文異常 問題解決

背景介紹:

在windows平臺下使用log4cxx日誌模組。

問題:

往控制檯輸出中文日誌資訊時,發現無法輸出中文,並導致了換行功能異常。

我的預期輸出是如下圖所示:


但實際輸出確實這樣的:


如圖所示,中文欄位無法輸出,且換行功能異常。

解決辦法:

setlocale(LC_ALL,"Chinese-simplified");

系統區域設定,把字符集設定為簡體中文即可。

ps: 以下轉自http://blog.csdn.net/crazyhacking/article/details/9497135

log4cxx的輸出樣式由Appender裡的Layout確定:

格式化符號說明:


%p:輸出日誌資訊的優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:輸出自應用程式啟動到輸出該log資訊耗費的毫秒數。
%t:輸出產生該日誌事件的執行緒名。
%l:輸出日誌事件的發生位置,相當於%c.%M(%F:%L)的組合,包括類全名、方法、檔名以及在程式碼中的行數。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:輸出日誌資訊所屬的類目,通常就是所在類的全名。
%M:輸出產生日誌資訊的方法名。
%F:輸出日誌訊息產生時所在的檔名稱。
%L::輸出程式碼中的行號。
%m::輸出程式碼中指定的具體日誌資訊。
%n:輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"。
%x:輸出和當前執行緒相關聯的NDC(巢狀診斷環境),尤其用到像java servlets這樣的多客戶多執行緒的應用中。
%%:輸出一個"%"字元。
另外,還可以在%與格式字元之間加上修飾符來控制其最小長度、最大長度、和文字的對齊方式。如:
1) c:指定輸出category的名稱,最小的長度是20,如果category的名稱長度小於20的話,預設的情況下右對齊。
2)%-20c:"-"號表示左對齊。
3)%.30c:指定輸出category的名稱,最大的長度是30,如果category的名稱長度大於30的話,就會將左邊多出的字元截掉,但小於30的話也不會補空格。