相关疑难解决方法(0)

过滤器Serilog根据上下文源记录到不同的接收器?

我有一个.NET Core 2.0应用程序,我成功地使用Serilog进行日志记录.现在,我想将一些数据库性能统计信息记录到一个单独的接收器(它们不用于调试,这基本上是应用程序中所有其他日志记录的目的,因此我希望将它们分开)并认为这可以完成通过创建数据库统计记录器Log.ForContext<MyClass>().

我不知道我应该如何配置Serilog 使用我的appsettings.json将我的"调试日志"记录到一个接收器并将我的数据库统计信息记录到另一个接收器?我希望可以这样做:

"Serilog": {
  "WriteTo": [
    {
      "Name": "RollingFile",
      "pathFormat": "logs/Log-{Date}.log",
      "Filter": {
        "ByExcluding": "FromSource(MyClass)"
      }
    },
    {
      "Name": "RollingFile",
      "pathFormat": "logs/DBStat-{Date}.log",
      "Filter": {
          "ByIncludingOnly": "FromSource(MyClass)"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

"Filter"配置的各个部分对我来说是纯粹的猜测.这是可以使用我的配置文件管理器还是我需要在我的Startup.cs文件中的代码中执行此操作?

编辑:我已经使用C#API工作但仍想使用JSON配置解决它:

Log.Logger = new LoggerConfiguration()
            .WriteTo.Logger(lc => lc
                .Filter.ByExcluding(Matching.FromSource<MyClass>())
                .WriteTo.LiterateConsole())
            .WriteTo.Logger(lc => lc
                .Filter.ByExcluding(Matching.FromSource<MyClass>())
                .WriteTo.RollingFile("logs/DebugLog-{Date}.log"))
            .WriteTo.Logger(lc => lc
                .Filter.ByIncludingOnly(Matching.FromSource<MyClass>())
                .WriteTo.RollingFile("logs/DBStats-{Date}.log", outputTemplate: "{Message}{NewLine}"))
            .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

c# logging serilog .net-core asp.net-core

19
推荐指数
3
解决办法
7629
查看次数

Serilog:如何不记录某些请求(或以不同级别记录)

目前,我启用 Serilog 来记录向我的服务器发出的所有 HTTP 请求(请参阅下面的 Program.cs 和logging.json)。

但是,Openshift 正在调用 /ready 和 /live,我不想记录这些请求

{"@t":"2020-12-17T15:02:08.7321442Z","@m":"HTTP \"GET\" \"/ready\" responded 200 in 41.3777 ms","@i":"62d0885c","RequestMethod":"GET","RequestPath":"/ready","StatusCode":200,"Elapsed":41.3777,"SourceContext":"Serilog.AspNetCore.RequestLoggingMiddleware","RequestId":"0HM52JISL6NBA:00000001","SpanId":"|d7e25f1-47c5ac680b1d5fd1.","TraceId":"d7e25f1-47c5ac680b1d5fd1","ParentId":"","ConnectionId":"0HM52JISL6NBA"}
Run Code Online (Sandbox Code Playgroud)

问题是我仍然想记录其他请求......

有人可以向我解释一下我可以在哪里挂钩这个逻辑吗?

程序.cs

class Program
{
    static async Task Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(provider: ConfigMapFileProvider.FromRelativePath("conf"), path: "logging.json", optional: false, reloadOnChange: true)
                .Build()
            )
            .Enrich.FromLogContext()
            .WriteTo.Console(new RenderedCompactJsonFormatter())
            .CreateLogger();

        await Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddJsonFile("conf/network.json", optional: false, reloadOnChange: false);
                config.AddJsonFile("conf/messagebus.json", optional: false, reloadOnChange: false);
                config.AddJsonFile("conf/auth.json", optional: false, reloadOnChange: false);
                config.AddJsonFile("conf/appsettings.json", optional: false, reloadOnChange: false);
            }) …
Run Code Online (Sandbox Code Playgroud)

serilog

5
推荐指数
1
解决办法
3202
查看次数

Serilog - 单独的信息文件,使用 appsetting.json 的例外

我正在使用滚动将所有日志写入一个文件。但我想通过Information,WarningExceptions滚动文件将它们分开。

我当前的配置是这样的

     "Serilog": {
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}",
          "pathFormat": "logs\\log-{Hour}.log",
          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": null,
          "rollingInterval": "Hour",
          "fileSizeLimitBytes": 5000000
        }
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)

班级

public ILogger GetLogger()
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        _logger =
            new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .CreateLogger();

        return _logger ;
    }
Run Code Online (Sandbox Code Playgroud)

c# serilog .net-core serilog-exceptions

2
推荐指数
1
解决办法
2315
查看次数

按方法名称过滤 Serilog

我想知道是否有可能实现过滤,我们改进对 serilog 的过滤,使其对子记录器更加具体。目前我可以过滤命名空间,但是我只想访问特定命名空间中的一种方法来记录到电子邮件,该命名空间的其余方法应保留默认日志记录。

.Filter.ByIncludingOnly(Matching.FromSource("SomeNamespace"))
Run Code Online (Sandbox Code Playgroud)

但是,我只想访问 SomeNamespace 中的 method1,而不是访问也位于同一命名空间中的 method2。有任何想法吗?

我无法使用 Serilog 级别来实现此目的。最想要的是过滤器的使用。

c# serilog

1
推荐指数
1
解决办法
3450
查看次数