我的理解是appsettings.Development.json文件优先于appsettings.json,但只有后一个文件中的值对调试窗口有任何影响.这是正确的吗?如果有,是否需要额外的设置?
以下是价值和结果……
appsettings.json
{ "Logging": { "IncludeScopes": false,"Debug": { "LogLevel": { "Default": "None" } },"Console": { "LogLevel": { "Default": "Information" } } } }
appsettings.Development.json
{ "Logging": { "IncludeScopes": false,"LogLevel": { "Default": "Information","System": "Information","Microsoft": "Information" } } }
调试时清空输出(请注意仅显示Application Insights遥测记录,我还没有找到如何摆脱它)
但是,如果我更改appsettings.json中的日志级别,那么我会看到输出符合预期…
appsettings.json
{ "Logging": { "IncludeScopes": false,"Debug": { "LogLevel": { "Default": "Information" } },"Console": { "LogLevel": { "Default": "Information" } } } }
调试时的新输出(请注意,Microsoft.AspNetCore.Hosting.Internal.WebHost:现在包含信息)
我的Startup.cs文件是使用新项目创建的默认ASP.NET Core 2.0模板,如下所示.此外,appsettings.json和appsettings.Development.json文件也由新项目模板自动创建.
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UsesqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity<ApplicationUser,IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); // Add application services. services.AddTransient<IEmailSender,AuthMessageSender>(); services.AddTransient<ISmsSender,AuthMessageSender>(); services.AddMvc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app,IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default",template: "{controller=Home}/{action=Index}/{id?}"); }); } }
这是我的Program.cs,它也是ASP.NET Core 2.0 MVC模板的默认设置.
public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build(); }
解
默认情况下,dev“appsettings.Development.json”配置文件在主“appsettings.json”配置文件之后加载,因此dev配置优先.但是,默认的appsettings.Development.json文件不包含日志级别设置的调试节点,这似乎很奇怪.这是工作开发配置.
{ "Logging": { "IncludeScopes": false,"LogLevel": { "Default": "None","System": "None","Microsoft": "None" },"Debug": { "LogLevel": { "Default": "Information","Microsoft": "Information" } } } }
解决方法
您没有看到Visual Studio输出窗口中的任何日志,因为您的appsettings.json的调试记录器的日志级别为None.
您需要在appsettings.Development.json中遵循.NET Core 2.0的每个记录器格式(预览2),这应该是下面的格式,以覆盖appsettings.json中的格式.
{ "Logging": { "<Logger>": { "LogLevel": { "Default": "<LogLevel>" } } } }
为了清楚起见,如果你想要一个Debug logger的Trace日志级别,这就是它在你的json配置中应该是这样的:
{ "Logging": { "Debug": { "LogLevel": { "Default": "Trace" } }