如果我用ASP.NET Core Web App (Model-View-Controller)创建了一个新的dotnet new mvc,那么它已经配置好了日志记录。
但是,http请求错误代码被记录为info事件。
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是否可以通过调查和重写日志事件将此行为更改为(4xx ->警告、5xx ->错误) .i.e。
我已经看过https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2了
这看上去乱七八糟的,但我没有找到一个钩子来达到这个目的
var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureLogging((hostingContext, logging) =>
{
// investigate and rewrite log event
})
.UseStartup<Startup>()
.Build()发布于 2019-06-25 05:41:52
您需要实现自己的ILogger和ILoggerProvider。
一个简单的演示,如:
CustomLogger
公共类CustomLogger : ILogger { public CustomLogger() {} public IDisposable BeginScope(TState state)=> NullScope.Instance;public bool IsEnabled(LogLevel logLevel) => true;公共无效日志( logLevel logLevel、eventId EventId、TState状态、异常、Func格式化程序){ var msg =格式化程序(状态、异常);if (msg.Contains("404")) { LogLevel = LogLevel.Warning;} Console.WriteLine($"{ GetLogLevelString(logLevel) }:{ eventId }{ msg }{ exception }");}私有静态字符串GetLogLevelString(LogLevel logLevel) { switch (logLevel) { case LogLevel.Trace:返回"trce";案例LogLevel.Debug:返回"dbug";LogLevel.Information:返回"info";LogLevel.Warning:返回“警告”;case LogLevel.Error:返回"fail";case LogLevel.Critical:返回"crit";默认情况:抛出新的LogLevel.Critical}}CustomLoggerProvider
公共类CustomLoggerProvider : ILoggerProvider { public ILogger CreateLogger(string categoryName) {返回新的CustomLogger();} public void (){}发布于 2019-10-14 08:46:17
单线解
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace temp
{
public class Startup
{
public void Configure(IApplicationBuilder app, IHostEnvironment env, ILogger<Startup> logger)
{
...
app.UseStatusCodePages(async context =>
{
var code = context.HttpContext.Response.StatusCode;
if (code == 404) {
logger.Log(LogLevel.Error, null, "log message");
}
});
...
}
}
}https://stackoverflow.com/questions/56731883
复制相似问题