是否有替代的 .NET 日志记录 class 到在 Mac 上运行的 ILogger/EventLog?

Is there an alternative .NET logging class to ILogger / EventLog that runs on Mac?

我在 Blazor 应用程序中注入一个对象作为使用 ILogger 构造的单例;

public MessageBroker(ILogger<MessageBroker> logger, IOptions<MessageBrokerConfig> config)

当我导航到该页面时,应用程序 (.NET Core 5.0) 崩溃;

Exception":"System.PlatformNotSupportedException: EventLog access is not supported on this platform.

我想日志记录是跨平台的棘手功能之一,因为它直接指向 OS。

有谁知道可以在 Mac Silicon、Windows 和 Linux 上运行的 ILogger 替代品?

问题不在ILogger,而在它的配置。显然,它使用 EventLogwhich is used to write logs to Windows Event Log,在其他平台上不可用。

您的日志记录配置中很可能有类似的东西。

logging.AddEventLog()

如果您不需要使用Windows事件日志,只需删除此行并使用other logging providers instead. Console是最基本的,只需将您的日志写入标准输出即可。

如果您正在寻找更高级的方案,例如记录到文件或外部日志收集器,我可以推荐 Serilog or Log4Net, they should work on all platforms without an issue. You can find other alternatives in awesome-dotnet-core repo


如果您确实需要使用 Windows 事件日志(例如,您的生产服务器是 Windows,但您在 MacOS 机器上开发),您应该将此行包装在 if 语句并用配置参数控制它

if (context.Configuration["UseEventLog"] == "true")
{
    logging.AddEventLog()
}