【问题标题】:Is force logging available in Microsoft.Extensions.LoggingMicrosoft.Extensions.Logging 中是否提供强制日志记录
【发布时间】:2018-05-16 19:46:51
【问题描述】:

我有 ASP.NET Core 应用程序。我正在使用Microsoft.Extensions.Logging.ILogger 接口和Serilog 日志记录提供程序。
在生产环境中,日志级别设置为Error。所以低于Error loglevel 的任何内容都不会被记录。

Microsoft.Extensions.Logging 中是否有可用的 Force 日志记录,无论日志级别设置如何,它都会记录消息?

基本上我想(暂时)记录一些信息而不将 LogLevel 设置为 Information,因为那样会记录所有其他不相关的信息消息。

更新 1
所以我根据建议更新了我的 appsettings.json,但是没有用。请注意,serilog 也有自己的日志级别,我已将其注释掉。但还是不行。

"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Error",
      "MyUserService": "Information"
    }   
 },   
 "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    //"MinimumLevel": "Error",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          //"restrictedToMinimumLevel": "Error",
          "connectionString": "Data Source=.\\SQLExpress;Initial Catalog=MyDataBase;Integrated Security=True;MultipleActiveResultSets=True",
          "tableName": "Logs"
        }
      }
    ],
    "Properties": {
      "Application": "MyApplication"
    }   
}

然后在 MyUserService 中

public class MyUserService : BaseService, IMyUserService
{

    private readonly ILogger<MyUserService> _logger;

    public MyUserService(MyDBContext dbContext, ILogger<MyUserService> logger)
        : base(dbContext)
    {            
        _logger = logger;
    }

    public async Task DoSomethig()
    {       
       _logger.LogInformation("Log something meaningful here");
    }       
 }

在program.cs中

     public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseUrls("http://*:40006")
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            //removed for brevity
        })
        .ConfigureLogging((hostingContext, logging) =>
        {         
            Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(hostingContext.Configuration)
            .CreateLogger();

            logging.AddSerilog();         
        })
        .Build();

【问题讨论】:

  • 你能不能把它记录为错误或致命等?一般来说,接收器使用最小栏来有效地停止在第一个实例中生成的消息
  • 是的,如果我不能强制记录,那是我最后的选择
  • 我在问为什么你认为你需要一个力量来改变单个消息的级别才能达到你的结果?
  • 因为我要记录的不是错误,而是有助于我们做出决定的信息(一些元数据)。此外,我们还有外部watch 服务,如果记录任何错误,它会向所有人发送电子邮件。我试图避免这种情况
  • 好的。您可以为另一个上下文创建一个记录器并将其标记为最小:信息但将其打开吗?或者降级您不想调试的其他信息?底线:没有效率的力量,但也有一致性的原因

标签: asp.net-core serilog coreclr .net-core-logging asp.net-core-logging


【解决方案1】:

这个想法是为每个日志类别配置日志级别。

一旦您让自己注入 ILogger&lt;MyCategory&gt;(其中 MyCategory 可以是任何类型 - 一种特殊类型,仅用于指示日志类别或仅指示您登录的类),您就可以配置独立于其他所有内容的日志级别:

"Logging": {
  "LogLevel": {
    "Default": "Error",
    "MyCategory": "Information"
  }
}

【讨论】:

  • 有趣。我会试一试并发布我的答案
  • 除此之外,我认为(至少在代码中)MinimumLevel.Override(category, level) 可以接受LoggingLevelSwitch 代替一个级别,您可以在运行时对其进行更新。 HTH!
  • 好的,所以我通过使用完整的类名MyNameSpace.MyUserService 而不仅仅是一个类名MyUserService 让它工作。这个链接也很有帮助jonhilton.net/2016/09/21/…
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多