【问题标题】:Serilog: azure webjob logging doesn't seem to work when hosted in azure?Serilog:在 azure 中托管时,azure webjob 日志记录似乎不起作用?
【发布时间】:2019-01-17 23:42:55
【问题描述】:

我有 azure webjob sdk (v3.0.3) 应用程序,该应用程序已配置为使用 serilog 进行日志记录。 当我在系统中本地运行应用程序时,日志似乎可以工作。下面是配置:

    static void Main(string[] args)
        {
            try
            {
                var builder = new HostBuilder()
                        .ConfigureAppConfiguration(SetupConfiguration)
                        .ConfigureLogging(SetupLogging)
                        .ConfigureServices(SetupServices)
                        .ConfigureWebJobs(webJobConfiguration =>
                        {
                            webJobConfiguration.AddTimers();
                            webJobConfiguration.AddAzureStorageCoreServices(); //this is to store logs in azure storage 
                        })
                        .UseSerilog()
                    .Build();
                builder.Run();
            }
}

SetupConfiguration 的代码如下:

  private static void SetupConfiguration(HostBuilderContext hostingContext, IConfigurationBuilder builder)
        {
            var env = hostingContext.HostingEnvironment;
            _configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();
        }

设置服务的代码:

private static void SetupServices(HostBuilderContext hostingContext, IServiceCollection serviceCollection)
    {
        serviceCollection.AddSingleton<IConfiguration>(_configuration);
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(_configuration)
            .CreateLogger();
        _logger = serviceCollection.BuildServiceProvider().GetRequiredService<ILoggerFactory>().CreateLogger("test");
    }

日志设置如下:

  private static void SetupLogging(HostBuilderContext hostingContext, ILoggingBuilder loggingBuilder)
        {
            loggingBuilder.SetMinimumLevel(LogLevel.Information);
            loggingBuilder.AddConsole();
            loggingBuilder.AddDebug();
            loggingBuilder.AddSerilog(dispose: true);
        }

在我的 TimerTrigger 方法中,我正在使用记录器:

[Singleton]
        public async static Task Trigger([TimerTrigger("%Job%")]TimerInfo myTimer)
        {           
          _logger.LogInformation($"From Trigger {DateTime.UtcNow.ToString()}");

        }

在appSettings.json中,serilog配置如下:

"Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": [
        {
            "Name": "RollingFile",
            "Args": {
                "pathFormat": ".\\Log\\log-{Date}.txt",
                "retainedFileCountLimit": 7,
                "fileSizeLimitBytes": 5000000,
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} {EventId} [{Level}] [{Properties}] {Message}{NewLine}{Exception}"
            }
        }
    ]
}

当我在本地运行应用程序时,会创建文件夹“Log”和日志文件。但是当我发布 webjob 时,webjob 的“app_data”文件夹中没有创建“Log”文件夹或日志文件。谁能帮我弄清楚如何配置 serilog 以使其与 webjobs 一起使用?

以下是使用的 nuget 包:

【问题讨论】:

    标签: azure logging serilog azure-webjobssdk azure-webjobs-continuous


    【解决方案1】:

    如果你想在WebJob中使用serilog,你需要安装这个包Serilog.Extensions.WebJobs。然后配置好serilog就可以使用了。

    您必须注入 ILogger 而不是使用全局 Log.Logger,否则日志消息将不会写入 Microsoft Azure WebJobs 仪表板。

    关于如何配置和使用serilog的详细说明,可以参考这个doc

    希望对您有所帮助,如果您还有其他问题,请告诉我。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多