Serilog: запись в Azure Webjob не работает, когда размещается в Azure? - PullRequest
0 голосов
/ 18 января 2019

У меня есть приложение 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" и файлы журналов создаются, когда я запускаю приложение локально. Но когда я публикую веб-работу, папка «Log» или файл журнала не создаются в папке «app_data» веб-работы. Может кто-нибудь помочь мне разобраться, как настроить serilog, чтобы он работал с веб-заданиями?

Ниже приведены используемые пакеты nuget: enter image description here

1 Ответ

0 голосов
/ 21 января 2019

Если вы хотите использовать serilog в WebJob, вам необходимо установить этот пакет Serilog.Extensions.WebJobs. Затем после настройки serilog вы сможете его использовать.

Вы должны внедрить ILogger, а не использовать глобальный Log.Logger, в противном случае сообщения журнала не будут записываться на панель мониторинга Microsoft Azure WebJobs.

Подробное описание о том, как настроить и использовать serilog, вы можете найти в этом doc .

Надеюсь, это поможет вам, если у вас еще есть вопросы, пожалуйста, дайте мне знать.

...