首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET 404请求作为警告

ASP.NET 404请求作为警告
EN

Stack Overflow用户
提问于 2019-06-24 07:40:19
回答 2查看 1.9K关注 0票数 4

如果我用ASP.NET Core Web App (Model-View-Controller)创建了一个新的dotnet new mvc,那么它已经配置好了日志记录。

但是,http请求错误代码被记录为info事件。

代码语言:javascript
复制
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

这看上去乱七八糟的,但我没有找到一个钩子来达到这个目的

代码语言:javascript
复制
    var webHost = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .ConfigureLogging((hostingContext, logging) =>
        {
            // investigate and rewrite log event
        })
        .UseStartup<Startup>()
        .Build()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-25 05:41:52

您需要实现自己的ILoggerILoggerProvider

一个简单的演示,如:

  1. 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}}
  2. CustomLoggerProvider 公共类CustomLoggerProvider : ILoggerProvider { public ILogger CreateLogger(string categoryName) {返回新的CustomLogger();} public void (){}
  3. 注册以上代码公共静态IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .ConfigureLogging(config => { config.ClearProviders();config.AddProvider(新CustomLoggerProvider());}); 您可以检查日志记录并实现您自己的日志提供程序。
票数 1
EN

Stack Overflow用户

发布于 2019-10-14 08:46:17

单线解

代码语言:javascript
复制
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");
                }
            });

            ...

        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56731883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档