ASP.NET Core Web App日志404请求为警告 [英] ASP.NET Core Web App log 404 requests as warning
问题描述
如果我使用 dotnet new mvc
创建一个新的 ASP.NET Core Web App(模型-视图-控制器)
,它已经开箱即用地进行了配置./p>
但是,http请求错误代码会记录为信息事件.
信息:Microsoft.AspNetCore.Hosting.Internal.WebHost [1]请求启动HTTP/1.1 GET https://localhost:5001/doesnotexists信息:Microsoft.AspNetCore.Hosting.Internal.WebHost [2]请求已在4.4052ms内完成404
是否可以通过调查和重写日志事件将此行为更改为(4xx->警告,5xx->错误).
我已经阅读了 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2
这看起来有些许,但我没有为此目的找到钩子
var webHost = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).ConfigureLogging((hostingContext,logging)=>{//调查并重写日志事件}).UseStartup< Startup>().建造()
您需要实现自己的 ILogger
和 ILoggerProvider
.
一个简单的演示,例如:
-
CustomLogger
公共类CustomLogger:ILogger{公共CustomLogger(){}公用IDisposable BeginScope< TState>(TState状态)=>NullScope.Instance;公共布尔IsEnabled(LogLevel logLevel)=>真的;公共无效Log< TState>(LogLevel logLevel,EventId eventId,TState状态,异常异常Func< TState,异常,字符串>格式化程序){var msg = formatter(state,exception);如果(msg.Contains("404")){logLevel = LogLevel.Warning;}Console.WriteLine($"{GetLogLevelString(logLevel)}:{eventId} {msg} {exception}");}私有静态字符串GetLogLevelString(LogLevel logLevel){开关(logLevel){案例LogLevel.Trace:返回"trce";案例LogLevel.Debug:返回"dbug";案例LogLevel.Information:返回信息";案例LogLevel.Warning:返回警告";案例LogLevel.Error:返回失败";案例LogLevel.Critical:返回暴击";默认:抛出新的ArgumentOutOfRangeException(nameof(logLevel));}}}
-
CustomLoggerProvider
公共类CustomLoggerProvider:ILoggerProvider{公共ILogger CreateLogger(字符串categoryName){返回新的CustomLogger();}公共无效Dispose(){}}
-
注册以上代码
公共静态IWebHostBuilder CreateWebHostBuilder(string [] args)=>WebHost.CreateDefaultBuilder(args).UseStartup< Startup>().ConfigureLogging(config => {config.ClearProviders();config.AddProvider(new CustomLoggerProvider());});
您可以检查记录并实现自己的日志提供者.
If I create a new ASP.NET Core Web App (Model-View-Controller)
with dotnet new mvc
it has already logging configured out of the box.
However, http request error codes are logged as info event.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET https://localhost:5001/doesnotexists
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 4.4052ms 404
Is it possible to changed this behaviour to (4xx -> warning, 5xx -> error) .i.e by investigating and rewriting log events.
I already read https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2
this looked promissing but I didn't find a hook for this purpose
var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureLogging((hostingContext, logging) =>
{
// investigate and rewrite log event
})
.UseStartup<Startup>()
.Build()
You need to implement your own ILogger
and ILoggerProvider
.
A simple demo like:
CustomLogger
public class CustomLogger : ILogger { public CustomLogger() { } public IDisposable BeginScope<TState>(TState state)=> NullScope.Instance; public bool IsEnabled(LogLevel logLevel) => true; public void Log<TState>( LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter ) { var msg = formatter(state, exception); if (msg.Contains("404")) { logLevel = LogLevel.Warning; } Console.WriteLine($"{ GetLogLevelString(logLevel) } : { eventId } { msg } { exception }"); } private static string GetLogLevelString(LogLevel logLevel) { switch (logLevel) { case LogLevel.Trace: return "trce"; case LogLevel.Debug: return "dbug"; case LogLevel.Information: return "info"; case LogLevel.Warning: return "warn"; case LogLevel.Error: return "fail"; case LogLevel.Critical: return "crit"; default: throw new ArgumentOutOfRangeException(nameof(logLevel)); } } }
CustomLoggerProvider
public class CustomLoggerProvider : ILoggerProvider { public ILogger CreateLogger(string categoryName) { return new CustomLogger(); } public void Dispose() { } }
Register above code
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging(config => { config.ClearProviders(); config.AddProvider(new CustomLoggerProvider()); });
You could check Logging and implement your own log provider.
这篇关于ASP.NET Core Web App日志404请求为警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!