Serilog ASP.NET 系统日志的核心应用设置配置
Serilog ASP.NET Core appsettings config for syslog
我正在尝试在 ASP.NET 核心 Web 应用程序中使用 appsettings.json 配置文件配置 Serilog。我已经设法让 RollingFile 配置部分正常工作,但我也在尝试将日志信息发送到另一个在线日志工具(例如 logentries 或 papertrail)
我安装了以下 Nuget 包:
Serilog.AspNetCore
Serilog.Settings.Configuration
Serilog.Sinks.Async
Serilog.Sinks.RollingFile
Serilog.Sinks.SyslogMessages
然后我将以下配置放入我的 appsettings.json 文件中:
"Serilog": {
"Using": [ "Serilog.Sinks.Async", "Serilog.Sinks.Syslog", "Serilog.Sinks.RollingFile" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Error"
}
},
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "RollingFile",
"Args": {
"outputTemplate": "[{Timestamp:MMM dd HH:mm:ss}] {Level:u3} {Message:lj} <s:{SourceContext}>{NewLine}{Exception}",
"pathFormat": "C:\LogFiles\Application\{Date}.log",
"fileSizeLimitBytes": 5000000,
"retainedFileCountLimit": null
}
},
{
"Name": "Syslog",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}",
"host": "logs.papertrailapp.com",
"port": 12345,
"format": "RFC5424",
"secureProtocols": "SecureProtocols.None",
"appName": "Application",
"facility": "Local7"
}
}
]
}
}
]
}
我设置记录器的 C# 代码是:
public static void Main(string[] args)
{
var currentEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{currentEnv}.json", true)
.AddEnvironmentVariables()
.Build();
Log.Logger =
new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception exception)
{
Log.Fatal(exception, "Host terminated unexpectedly");
throw;
}
finally
{
Log.CloseAndFlush();
}
}
我是否遗漏了 Syslog 配置块中的某些内容?
使用 IConfiguration
方法配置 Serilog 时,Name
值不一定是接收器本身的名称。对于Serilog.Sinks.RollingFile
,它就是简单的RollingFile
,但是对于Serilog.Sinks.Syslog
,你实际上有三个选择:
UdpSyslog
TcpSyslog
LocalSyslog
我发现发现这些选项的最佳方法是查看基于代码的配置的文档。例如对于 Serilog.Sinks.Syslog
,示例是:
.WriteTo.UdpSyslog
.WriteTo.TcpSyslog
.WriteTo.LocalSyslog
我正在尝试在 ASP.NET 核心 Web 应用程序中使用 appsettings.json 配置文件配置 Serilog。我已经设法让 RollingFile 配置部分正常工作,但我也在尝试将日志信息发送到另一个在线日志工具(例如 logentries 或 papertrail)
我安装了以下 Nuget 包:
Serilog.AspNetCore
Serilog.Settings.Configuration
Serilog.Sinks.Async
Serilog.Sinks.RollingFile
Serilog.Sinks.SyslogMessages
然后我将以下配置放入我的 appsettings.json 文件中:
"Serilog": {
"Using": [ "Serilog.Sinks.Async", "Serilog.Sinks.Syslog", "Serilog.Sinks.RollingFile" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Error"
}
},
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "RollingFile",
"Args": {
"outputTemplate": "[{Timestamp:MMM dd HH:mm:ss}] {Level:u3} {Message:lj} <s:{SourceContext}>{NewLine}{Exception}",
"pathFormat": "C:\LogFiles\Application\{Date}.log",
"fileSizeLimitBytes": 5000000,
"retainedFileCountLimit": null
}
},
{
"Name": "Syslog",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}",
"host": "logs.papertrailapp.com",
"port": 12345,
"format": "RFC5424",
"secureProtocols": "SecureProtocols.None",
"appName": "Application",
"facility": "Local7"
}
}
]
}
}
]
}
我设置记录器的 C# 代码是:
public static void Main(string[] args)
{
var currentEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{currentEnv}.json", true)
.AddEnvironmentVariables()
.Build();
Log.Logger =
new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception exception)
{
Log.Fatal(exception, "Host terminated unexpectedly");
throw;
}
finally
{
Log.CloseAndFlush();
}
}
我是否遗漏了 Syslog 配置块中的某些内容?
使用 IConfiguration
方法配置 Serilog 时,Name
值不一定是接收器本身的名称。对于Serilog.Sinks.RollingFile
,它就是简单的RollingFile
,但是对于Serilog.Sinks.Syslog
,你实际上有三个选择:
UdpSyslog
TcpSyslog
LocalSyslog
我发现发现这些选项的最佳方法是查看基于代码的配置的文档。例如对于 Serilog.Sinks.Syslog
,示例是:
.WriteTo.UdpSyslog
.WriteTo.TcpSyslog
.WriteTo.LocalSyslog