簡體   English   中英

如何設置 dotnet 日志記錄的文化?

[英]How can I set the culture for dotnet logging?

我正在使用 dotnetcore 3.1 登錄。 當我在記錄器中使用日期的復合格式時,我得到的格式與在應用程序代碼中將日期轉換為字符串時的格式不同。

這段代碼:

ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
_logger = loggerFactory.CreateLogger<Program>();
_logger.LogInformation("TEST date via format string {}", DateTime.Today);
_logger.LogInformation("TEST date with concatentation:" + DateTime.Today);

產生這個輸出(注意天和月順序的變化):

TEST date via format string 08/26/2020 00:00:00
TEST date with concatentation:26/08/2020 00:00:00

我很驚訝記錄器沒有從應用程序繼承文化。 我是否遺漏了什么,如果沒有,我該如何控制記錄器的文化?

這引起了我的興趣,我決定深入挖掘一下。

Logging 存儲庫中的 dotnet LogValuesFormatter 來看,使用大括號 { } 時,對 Format 方法的調用使用了不變區域性。

其中,根據Microsoft 文檔設置為 MM/dd/yyyy。

但是,串聯似乎確實使用了當前的區域性。

我建議,如果您想使用大括號格式,您只需調用 ToString 並添加文化,以便在格式化程序獲得它之前將日期轉換為當前文化中的字符串。 您還可以使用字符串插值,它使用與大括號類似的語法,但似乎也使用當前文化:

_logger.LogInformation("Current culture is "+  CultureInfo.CurrentCulture.Name);
_logger.LogInformation("TEST date via format string {}", DateTime.Today);
_logger.LogInformation("TEST date via cultured format string {}", DateTime.Today.ToString(CultureInfo.CurrentCulture));
_logger.LogInformation("TEST date with concatentation:" + DateTime.Today);
_logger.LogInformation($"TEST date with string interpolation: {DateTime.Today}");

這段代碼給了我這個輸出:

Current culture is en-GB
TEST date via format string 09/12/2020 00:00:00
TEST date via cultured format string 12/09/2020 00:00:00
TEST date with concatentation:12/09/2020 00:00:00
TEST date with string interpolation: 12/09/2020 00:00:00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM