Serilog:在 azure 中托管时,azure webjob 日志记录似乎不起作用?
Serilog: azure webjob logging doesn't seem to work when hosted in azure?
我有 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包:
如果你想在WebJob
中使用serilog
,你需要安装这个包Serilog.Extensions.WebJobs
。然后配置好serilog
后就可以使用了
您必须注入 ILogger 而不是使用全局 Log.Logger 否则日志消息将不会写入 Microsoft Azure WebJobs 仪表板。
关于如何配置和使用serilog
的详细说明,可以参考这篇doc。
希望对您有所帮助,如果您还有其他问题,请告诉我。
我有 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包:
如果你想在WebJob
中使用serilog
,你需要安装这个包Serilog.Extensions.WebJobs
。然后配置好serilog
后就可以使用了
您必须注入 ILogger 而不是使用全局 Log.Logger 否则日志消息将不会写入 Microsoft Azure WebJobs 仪表板。
关于如何配置和使用serilog
的详细说明,可以参考这篇doc。
希望对您有所帮助,如果您还有其他问题,请告诉我。