6

我遵循此文档Logging in .NET Core 和 ASP.NET Core,尝试将日志写入 Windows EventLog。

首先,我在 Windows 事件日志中创建 Source 和 Log:

if (!EventLog.SourceExists("MyTestSource"))
{
    EventLog.CreateEventSource("MyTestSource", "MyTestLog");
    return;
}

它被创建了。

然后,我从我的 ASP.NET Core 应用程序(核心 3.0)的 Program.cs 中配置了 CreateHostBuilder 的日志记录:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddEventLog(new EventLogSettings
            {
                SourceName = "MyTestSource",
                LogName = "MyTestLog"
            });
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

我想就是这样。然后我在我的控制器中使用记录器:

[Route("[controller]")]
[ApiController]
public class ServerController : ControllerBase
{
    ILogger<ServerController> _logger = null;
    public ServerController(ILogger<ServerController> logger)
    {
        _logger = logger;
    }

    [HttpGet("GetServerInfo")]
    public string GetServerInfo()
    {
        _logger.LogInformation("GetServerInfo Called");
        return "Hello I'm Server";
    }
}

但 Windows EventLog 中的 MyTestLog 中没有任何内容。有什么我错过的吗?

4

3 回答 3

6

您可以采用仅配置方法,将现有CreateHostBuilder代码保持原样。

如您链接的文档中所述,在Windows Eventlog 部分下,EventLogProvider未明确配置时默认为警告级别:

与其他提供者不同,EventLog 提供者不继承默认的非提供者设置。
如果未指定 EventLog 日志设置,则默认为 LogLevel.Warning。

要将此日志记录级别降低到 ,您必须在文件的部分中Information预见到EventLog提供程序的显式条目。Loggingappsettings.{Environment}.json

例如appsettings.Development.json

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        },
        "EventLog": {
            "LogLevel": {
                "Default": "Information"
            }
        }
    }
}
于 2020-12-21T20:07:18.073 回答
4

它是由 引起的Host.CreateDefaultBuilder(args),它执行:

.ConfigureLogging(loggingBuilder => {
    loggingBuilder.AddFilter<EventLogLoggerProvider>((Func<LogLevel, bool>) (level=>level>=LogLevel.Warning));
}

在引擎盖下。警告比信息高 1 级,所以...

作为一种解决方案,您可以创建新的HostBuilder使用new HostBuilder()并从头开始配置它,或者通过.ConfigureLogging在创建默认主机构建器后调用来覆盖该行为。

于 2020-02-24T14:41:34.903 回答
2

尝试提高您的日志记录_logger.LogError("GetServerInfo Called""),看看它是否有效。如果是这样,那么您将不得不设置您的日志过滤

于 2019-12-04T21:01:05.450 回答