IIS 托管的 asp.net 核心应用程序中的控制台日志在哪里
Where are the console logs in an asp.net core application hosted by IIS
我已经使用出色的 Serilog 库将日志记录添加到 asp.net 核心应用程序。我已经为 Sql 服务器和 Literate 控制台添加了接收器。
sql 服务器接收器当然工作得很好,但是,这有点尴尬,我不知道如何在控制台中显示日志 window。
这是我试过的:
- 在已发布的目录中,我有 运行 命令 dotnet 运行 但出现错误提示 project.json不存在。如果我 运行 该文件所在的开发机器上的命令,这当然有效。日志显示在打开的控制台中。
- 我也试过 运行 直接 exe,它说它正在 监听:http://localhost:5000 ,但控制台 window 中未显示任何日志记录。
代码如下:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
ConfigureLogging();
}
private void ConfigureLogging()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.LiterateConsole(LogEventLevel.Verbose)
.WriteTo.RollingFile(".\Logs\log-{Date}.txt")
.WriteTo.MSSqlServer(Configuration.GetConnectionString("Logging"), "Logs"/*, columnOptions: new ColumnOptions()*/)
.CreateLogger();
}
public IConfigurationRoot Configuration { get; }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime)
{
app.Use(async (context, next) =>
{
await next();
// If there's no available file and the request doesn't contain an extension, we're probably trying to access a page.
// Rewrite request to use app root
if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/"; // Put your Angular root page here
await next();
}
});
loggerFactory
.AddSerilog();
// Ensure any buffered events are sent at shutdown
appLifetime.ApplicationStopped.Register(Log.CloseAndFlush);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseDefaultFiles();
app.UseStaticFiles();
//app.UseCors(builder => builder.AllowAnyOrigin());
app.UseMvc();
//app.UseHangfireDashboard(); // Will be available under http://localhost:5000/hangfire
//app.UseHangfireServer();
}
如何在控制台中显示日志 window?
在 IIS 下,不收集控制台日志。您需要为 IIS 托管应用程序使用其他接收器之一,例如您配置的滚动文件。
我已经使用出色的 Serilog 库将日志记录添加到 asp.net 核心应用程序。我已经为 Sql 服务器和 Literate 控制台添加了接收器。
sql 服务器接收器当然工作得很好,但是,这有点尴尬,我不知道如何在控制台中显示日志 window。
这是我试过的:
- 在已发布的目录中,我有 运行 命令 dotnet 运行 但出现错误提示 project.json不存在。如果我 运行 该文件所在的开发机器上的命令,这当然有效。日志显示在打开的控制台中。
- 我也试过 运行 直接 exe,它说它正在 监听:http://localhost:5000 ,但控制台 window 中未显示任何日志记录。
代码如下:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
ConfigureLogging();
}
private void ConfigureLogging()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.LiterateConsole(LogEventLevel.Verbose)
.WriteTo.RollingFile(".\Logs\log-{Date}.txt")
.WriteTo.MSSqlServer(Configuration.GetConnectionString("Logging"), "Logs"/*, columnOptions: new ColumnOptions()*/)
.CreateLogger();
}
public IConfigurationRoot Configuration { get; }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime)
{
app.Use(async (context, next) =>
{
await next();
// If there's no available file and the request doesn't contain an extension, we're probably trying to access a page.
// Rewrite request to use app root
if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/"; // Put your Angular root page here
await next();
}
});
loggerFactory
.AddSerilog();
// Ensure any buffered events are sent at shutdown
appLifetime.ApplicationStopped.Register(Log.CloseAndFlush);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseDefaultFiles();
app.UseStaticFiles();
//app.UseCors(builder => builder.AllowAnyOrigin());
app.UseMvc();
//app.UseHangfireDashboard(); // Will be available under http://localhost:5000/hangfire
//app.UseHangfireServer();
}
如何在控制台中显示日志 window?
在 IIS 下,不收集控制台日志。您需要为 IIS 托管应用程序使用其他接收器之一,例如您配置的滚动文件。