![](/img/trans.png)
[英]Set CultureInfo for new threads from .NET Windows Service
[英].NET Core Windows Service CultureInfo configuration
我目前正在研究 .NET 核心 Windows 服務,實現幾個BackgroundService
類來在計時器上運行東西。
除了一件事之外,一切都運行良好 - 向 ILogger 引用寫入日期似乎使用了不正確的 Culture ( en-US
),而不是系統配置en-AU
。
例如 -
public override Task StartAsync(CancellationToken cancellationToken)
{
var utcNow = DateTime.UtcNow;
Logger.LogInformation("Started at {utcNow}", utcNow);
return base.StartAsync(cancellationToken);
}
將產生日志 -
Windows 服務/控制台應用程序中是否可以設置文化? 我使用UseRequestLocalization
ASP.NET 環境,但在上下文中似乎不合邏輯,因為沒有請求。
我嘗試設置各種CultureInfo...
屬性但沒有結果 - 任何幫助將不勝感激。
入口點Program
class 供參考 -
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureLogging((hostContext, logging) =>
{
DBLoggerConfiguration config = hostContext.Configuration.GetSection("Logging").Get<DBLoggerConfiguration>();
logging.AddDBLogger(config);
})
.ConfigureServices((hostContext, services) =>
{
services.AddHttpClient<ISMSService, TwilioSMSService>();
services.AddHostedService<ExpirationSchedule>();
services.AddHostedService<BillingSchedule>();
});
}
}
編輯:通過 Github repo 中的一些挖掘,負責在消息中格式化參數的LogValuesFormatter
僅使用 CultureInfo.InvariantCulture - 它嚴重依賴於美國格式化日期等方式。似乎沒有辦法配置這個,所以我在 Github 存儲庫中提交了一個錯誤,希望得到一些支持 - https://github.com/dotnet/extensions/issues/3380
此時應用此設置!
public static void Main(string[] args)
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-BR", true) { DateTimeFormat = { ShortDatePattern = "dd/MM/yyyy", FullDateTimePattern = "dd/MM/yyyy HH:mm:ss", LongTimePattern = "HH:mm:ss" } };
CreateHostBuilder(args).Build().Run();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.