他们是在生产和开发环境的 asp.net core 2.0 项目的控制台日志中提及日期和时间的方法吗?
我的启动中有以下内容:
services.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"+Environment.EnvironmentName))
.AddConsole()
.AddDebug();
});
Run Code Online (Sandbox Code Playgroud)
应用程序设置.json:
"LoggingDevelopment": {
"IncludeScopes": false,
"Console": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
},
"LoggingProduction": {
"IncludeScopes": false,
"Console": {
"LogLevel": {
"Default": "Error",
"System": "Error",
"Microsoft": "Error"
}
}
},
Run Code Online (Sandbox Code Playgroud)
当前的[开发]日志布局(没有日志行的日期或时间):
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action a.Controller (project) in 531.2457ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 532.5812ms 200 text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
在生产模式下,日期和时间对于错误行来说非常方便。
默认控制台记录器非常有限。当然,总是可以使用 lambda 格式化程序,如 serpent5 提供的 Github 问题中所述。但只有使用原始ILogger.Log()方法才能访问它。它不适用于或 之ILogger类的扩展。如果您不控制日志记录调用,则此选项也不可用。当日志记录由 ASP.NET Core 内部类完成时,这实际上是您的情况。LogInformationLogError
因此,您需要一些更灵活的 .Net Core 记录器实现。我建议使用 Serilog。它非常简单,但同时非常灵活和强大。
要将 Serilog 集成到 ASP.Net Core 应用程序中,请执行以下操作:
安装以下 NuGet 包:
除了控制台之外,Serilog 还支持许多其他目标,例如滚动文件、电子邮件、SQL Server 等。请参阅其他Serilog 目标的列表。
在应用程序启动时配置 Serilog:
这是一个示例:
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}")
.CreateLogger();
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog()
.Build();
}
Run Code Online (Sandbox Code Playgroud)
提供的输出模板将日期和时间添加到记录的消息中:
| 归档时间: |
|
| 查看次数: |
3401 次 |
| 最近记录: |