- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我尝试使用 ILogger.LogInformation()
输出带有货币格式说明符的数值时,我得到了一个不同于我使用 Console.Log(string.Format( ))
。后者显示预期的美元符号作为符号,而前者显示不可打印的内容。
示例代码
var services = new ServiceCollection();
services.AddLogging(x =>
{
x.AddDebug();
x.AddConsole();
});
var svcProvider = services.BuildServiceProvider();
var logger = svcProvider.GetRequiredService<ILoggerFactory().CreateLogger<Program>();
logger.LogInformation("Amount {0:C}", 100.0);
System.Diagnostics.Debug.WriteLine(string.Format("Amount {0:C}", 100.0));
调试输出
xyz.Program:Information: Amount ¤100.00
Amount $100.00
我知道为 ILogger 配置 CultureInfo 的方法,但我不想在每次编写时都指定它。另外,我认为这无关紧要,但代码是在 async
方法中执行的。
那么这是一个错误,是我的期望不切实际,还是我做错了什么?
最佳答案
显然,这种行为的原因是日志不应特定于任何语言环境。我在 Microsoft.Extensions.Logging.Abstractions 存储库中搜索了解决方法或设置,但似乎没有办法规避此行为。
(几乎)ILogger 的所有日志记录方法都来自静态扩展类,LoggerExtensions(ILogger 定义了一个 Log
方法,直接使用会很痛苦)。该类中的所有方法最终都会调用相同的 Log
方法,该方法将消息格式及其参数转换为 FormattedLogValues 对象。
FormattedLogValues 对象有一个静态缓存,由格式字符串和 LogValuesFormatter 的值作为键控。这些格式化程序负责将消息和参数转换为字符串,并在调用 string.Format
时将文化显式设置为 CultureInfo.InvariantCulture。这就是使用货币格式说明符时显示“圣甲虫”符号 (¤) 的原因。
因为我知道我的所有金额都将以美元为单位,所以最简单和最正确的解决方案是避免使用客户数字格式字符串的货币说明符。
logger.LogInformation("Amount {0:$#,##0.00}", 100.0);
感谢@Amy 和@PanagiotisKanavos 的所有帮助。
关于c# - ILogger 显示不正确的货币符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709972/
我有记录到 Microsoft.Extensions.Logging.ILogger 的代码(主要是扩展方法)。 我已将 Serilog 配置为实际进行日志记录。 我找不到将 Serilog.ILog
这可能与Pass ILogger or ILoggerFactory to constructors in AspNet Core?有点关系,但是这是专门针对库设计的,而不是关于使用这些库的实际应用程
我一直在尝试将 .net core 库项目引用到我的 Azure 函数项目中,以调用 .net core 类库中定义的进程之一。 .net core 库项目使用 ILogger。 但是,每当我尝试运行
如果类 T 包含对 ILogger 的依赖,则依赖关系已解决: public class Foo { private ILogger _logger; public Foo(ILogg
我已经将 vs 2019 用于控制台应用程序(dotnet core 3.1), Install-Package Microsoft.Extensions.Logging.Console -Versi
使用Microsoft.ApplicationInsights.AspNetCore v2.6.1使用 .net core v2.2.2,我可以看到 Azure Application Insight
我正在尝试在我的 Azure 函数中使用 Serilog.ILogger。我正在设置它,以便我可以添加自定义属性。当我尝试运行 Azure 函数时,会弹出控制台窗口并显示以下错误: [2021-03-
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
这更像是一个架构问题:您是使用 ILogger(并通过 DI 将其传递到构造函数中)还是更喜欢静态类 Log? 我们经常使用 ILogger,但它似乎确实使代码困惑,尤其是当它通过构造函数传递时。如果
我是第 3 方服务的 C# 开源包装器的作者。我需要公开一个 ILogger 工具(例如 https://logging.apache.org/log4net/release/sdk/log4net.
我正在使用 NLog (v2.0) 试用 Ninject 的日志记录扩展 (v3.0),根据我的阅读,我不应该配置任何东西,就像auto-神奇的,我需要做的就是在需要的地方声明一个ILogger 依赖
当我尝试使用 ILogger.LogInformation() 输出带有货币格式说明符的数值时,我得到了一个不同于我使用 Console.Log(string.Format( ))。后者显示预期的美元
我正在未来项目的原型(prototype)中使用 Durable Azure Function。 基本上,我有一个由启动 Orchestrator 的 HTTP POST 请求触发的客户端 Azure
我有一个函数应用程序(版本 2.0)并尝试记录异常的堆栈跟踪。 try { processedOrder = await orderProcessin
请参阅Log unhandled exceptions to custom logger在github上。显然 Up to Preview 2 Blazor 通过 Console.WriteLine
我有一个 ASP.NET Core 2 Web 应用程序正在部署到生产环境,需要启用日志来解决错误。我无法在文档中的任何地方找到 appsettings.json 的记录器部分中的架构。这是我在那里的
我正在实现一个自定义的 Microsoft.Extensions.Logging.ILogger (和 ILoggerProvider。我想检索当前的身份,但我真的不知道,因为我无法注入(inject
我有一个 azure 功能,它可以毫无问题地记录信息。 namespace aspnetcore_azurefun_blob { [StorageAccount("AzureWebJobsSt
我有一个服务,它执行一些 REST API 调用,并且我在 API 调用之前和之后进行自定义日志记录: _logger.LogTrace("Invoked API {ApiName}", new {
我是一名优秀的程序员,十分优秀!