【发布时间】:2017-11-27 12:51:25
【问题描述】:
我正在尝试在使用 Asp.Net Core 2.0.1、EF 2.0.1 和 MVC 6 的多项目解决方案中将 Serilog 设置为我的记录器。
我已经设置了 Serilog,主要遵循这篇博文中的指南 Set up Serilog post
该帖子中的 json 存在问题,我已更正并在此处显示
appsettings.json 文件
{
"ApplicationConfiguration": {
"ConnectionStrings": {
"DevelopmentConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo_Development;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"ApplicationInfo": {
"VersionNumber": "1.0.0",
"Author": "Jimbo",
"ApplicationName": "CustomTemplate",
"CreatedOn": "November 20, 2017"
},
"Serilog": {
"Using": [
"Serilog.Sinks.RollingFile",
"Serilog.Sinks.Async",
"Serilog.Sinks.ApplicationInsights",
"Serilog.Sinks.Console",
"Serilog.Sinks.Seq"
],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning"
}
},
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "RollingFile",
"Args": { "pathFormat": "Logs/log-{Date}.log" }
}
]
}
}
],
"Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
"Properties": {
"Application": "CustomTemplate"
}
}
}
}
我在 Program.cs 的 Main 方法中有记录器配置工作
public static int Main(string[] args)
{
var currentEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{currentEnv}.json", optional: true)
.AddEnvironmentVariables()
.Build();
//Configure logger
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
//do this for now
//TODO:figure out how to add to Serilog config in appsettings.json
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
Log.Information("Logger created");
try
{
Log.Information("Starting web host");
BuildWebHost(args).Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Web Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
//BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
在我的启动方法中
services.AddLogging(loggingBuilder =>
loggingBuilder.AddSerilog(dispose: true));
我假设 Serilog 会在我运行应用程序后创建 Logs 文件夹,但没有 Log 文件夹或日志。我在解决方案的根目录和 Web 应用程序项目中都添加了一个 Logs 文件夹,然后再次运行它。没有日志。博客文章作者建议查看机器根文件夹。我查看了 C 和 OneDrive 主文件夹(存储在 OneDrive 上的解决方案文件),但那里也没有日志。
然后我注意到堆栈跟踪警告
发生 System.IO.FileNotFoundException H结果=0x80070002 Message=未找到配置文件“appsettings.json”且不是可选的。物理路径为“C:\Users\OneDrive\TestingConfigurationAspNetCore2\TestMvcApp\bin\Debug\netcoreapp2.0\appsettings.json”。 来源= 堆栈跟踪: 在 Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(布尔重新加载) 在 Microsoft.Extensions.Configuration.FileConfigurationProvider.Load() 在 Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 提供者) 在 Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
我之前收到此警告,这就是为什么我在配置设置中添加了 set bath path 方法,因为应用程序在代码行失败
.AddJsonFile("appsettings.json")
这很明显,因为在 bin 文件夹中,该文件不称为 appsettings.json,而是称为 TestMvcApp.runtimeconfig.json。
一旦我添加了 .SetBasePath,代码就会运行,所以我在配置设置后放置了一个断点。配置对象包含我的 appsettings.json 文件中的所有设置,那么为什么我会收到堆栈跟踪错误?我不知道,但我敢打赌,这就是没有日志的原因(控制台中也没有出现日志消息)
任何关于为什么堆栈跟踪错误或为什么没有日志消息写入日志文件或显示在控制台上的帮助将不胜感激。
【问题讨论】:
-
这一行
.WriteTo.Seq("http://localhost:5341")表示您不是在写入日志文件,而是写入日志服务器。这是正确的/你的意图吗? -
我补充说,当滚动日志没有写入时,我是否可以在那里写入。他们也不去那里
-
除非我错了,否则 Serilog 应该写入配置中定义的所有 WriteTo
-
BuildHost 中缺少 UseSerilog
标签: c# json logging asp.net-core-2.0 serilog