标签: serilog

Serilog - 多个日志文件

我正在使用Serilog进行日志记录,并且无法弄清楚如何将日志事件分离到不同的文件.例如,我想将错误记录到error_log-ddmmyyyy.txt,并将警告记录到warn_log-ddmmyyyy.txt.

这是我的记录器配置:

Log.Logger = new LoggerConfiguration()
            .WriteTo.Logger(lc =>
                lc.Filter.ByIncludingOnly(Matching.WithProperty("Level", "Warning"))
                    .WriteTo.RollingFile(
                        Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Logs\warn_log-{Date}.txt"),
                        outputTemplate: OutputTemplate))
            .WriteTo.Logger(lc =>
                lc.Filter.ByIncludingOnly(Matching.WithProperty("Level", "Error"))
                    .WriteTo.RollingFile(
                        Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Logs\error_log-{Date}.txt"),
                        outputTemplate: OutputTemplate))
            .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

它仅在我在日志消息中指定{Level}属性时才有效.

我试图使用:

Matching.WithProperty<LogEventLevel>("Level", l => l == LogEventLevel.Warning)
Run Code Online (Sandbox Code Playgroud)

但它也没有用.

c# logging serilog

17
推荐指数
3
解决办法
9909
查看次数

Serilog的AddSerilog无法识别

我正在尝试调用loggerFactory.AddSerilog(); 根据文档,但无法识别AddSerilog方法:

"错误CS1061'ILoggerFactory'不包含'AddSerilog'的定义,也没有扩展方法'AddSerilog'接受第一个......".

我正在使用ASP.NET CORE和完整的.NET框架.我究竟做错了什么?

.net c# serilog asp.net-core

16
推荐指数
4
解决办法
1万
查看次数

如何使用 Azure Functions v4 正确设置 Serilog?

我想在 Azure Function v4 (.net 6) 中使用 Serilog(日志应发送到 Datadog)。为此,我安装了以下 nuget 软件包:

<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Serilog.Formatting.Compact" Version="1.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
<PackageReference Include="Serilog.Sinks.Datadog.Logs" Version="0.3.5" />
Run Code Online (Sandbox Code Playgroud)

以下是 Startup.cs 类中的配置:

public override void Configure(IFunctionsHostBuilder builder)
{
  builder.Services.AddHttpClient();
  
  //... adding services etc.

  Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .MinimumLevel.Override("Worker", LogEventLevel.Warning)
    .MinimumLevel.Override("Host", LogEventLevel.Warning)
    .MinimumLevel.Override("System", LogEventLevel.Error)
    .MinimumLevel.Override("Function", LogEventLevel.Error)
    .MinimumLevel.Override("Azure.Storage.Blobs", LogEventLevel.Error)
    .MinimumLevel.Override("Azure.Core", LogEventLevel.Error)
    .Enrich.WithProperty("Application", "Comatic.KrediScan.AzureFunctions")
    .Enrich.FromLogContext()
    .WriteTo.DatadogLogs("XXXXXXXXXXX", configuration: new DatadogConfiguration() { Url = "https://http-intake.logs.datadoghq.eu" }, logLevel:   LogEventLevel.Debug)
    .WriteTo.Console()
    .CreateLogger();

  builder.Services.AddSingleton<ILoggerProvider>(sp …
Run Code Online (Sandbox Code Playgroud)

c# serilog datadog azure-functions .net-6.0

16
推荐指数
2
解决办法
2万
查看次数

向Serilog添加自定义属性

我在我的应用程序中使用Serilog和MS SQL Server接收器.我们假设我已经定义了以下类......

public class Person
{
  public string FirstName { get; set; }
  public string LastName { get; set; }

  public DateTime BirthDate { get; set; }
  // ... more properties
}
Run Code Online (Sandbox Code Playgroud)

...并创建了一个实例:

var person = new Person
{
    FirstName = "John",
    LastName = "Doe",
    BirthDate = DateTime.UtcNow.AddYears(-25)
};
Run Code Online (Sandbox Code Playgroud)

我在我的代码中放置了以下日志调用:

Log.Information("New user: {FirstName:l} {LastName:l}",
    person.FirstName, person.LastName);
Run Code Online (Sandbox Code Playgroud)

是否可以在不将其添加到消息模板的情况下记录该BirthDate属性,以便在PropertiesXML列中呈现它?我想稍后在我的应用程序的日志查看器的详细信息视图中输出它.

我基本上寻找类似于对象解构的行为,但不打印平面对象作为日志消息的一部分.

serilog

15
推荐指数
3
解决办法
7452
查看次数

Serilog:登录到不同的文件

我将所有类型的事件记录到单个Json文件,而不管LogLevel.现在我需要将一些自定义性能计数器记录到单独的Json文件中.怎么能在Serilog做到这一点.我应该创建不同的Logger实例并使用它来记录性能计数器吗?想在LibLog中使用它

c# serilog

15
推荐指数
2
解决办法
6606
查看次数

使用appsettings.json配置Serilog RollingFile

我正在尝试为.NET Core项目配置Serilog.这就是我的意思appsettings.json:

 "Serilog": 
{
    "MinimumLevel": "Verbose",
    "Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"],
    "WriteTo": [
      { "Name": "RollingFile",
        "Args": {
          "pathFormat": "C:/Logfiles/testapp/log-{Date}.json",
          "textFormatter": "JsonFormatter",
          "fileSizeLimitBytes": 2147483648,
          "retainedFileCountLimit": 5
        }
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

我看到的问题JsonFormatter是没有拾取,而是使用默认文本格式化程序获取条目.我尝试过使用"formatter": "JsonFormatter",但结果相同.

如果我在代码中配置Serilog,一切正常:

var jsonSink = new RollingFileSink(config["Logger:FilePath"], new JsonFormatter(), 2147483648, 5);

var logger = new Serilog.LoggerConfiguration().WriteTo.Sink(jsonSink);
Run Code Online (Sandbox Code Playgroud)

这是我的相关部分project.json:

"Serilog": "2.2.1",
"Serilog.Extensions.Logging": "1.1.0",
"Serilog.Sinks.Literate": "2.0.0",
"Serilog.Sinks.Seq": "2.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Serilog.Enrichers.Thread": "2.0.0", …
Run Code Online (Sandbox Code Playgroud)

c# serilog .net-core

15
推荐指数
3
解决办法
2万
查看次数

Serilog和ASP.NET Core 2.1

出于某种原因,我发现很难理解Serilog配置发生了什么.我有一个带有.NET Core 2.1的web api并已安装serilog.sink.logstash.我的创业公司有:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var serverURL = Configuration.GetSection("Logging")["logstashServer"];
    var logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .Enrich.WithProperty("Enviroment", env.EnvironmentName)
        .Enrich.WithProperty("ApplicationName", "MyApp")
        .WriteTo.LogstashHttp(serverURL);           

    if (env.IsDevelopment())
    {         
        app.UseDeveloperExceptionPage();
        logger.WriteTo.Console();
    }

    loggerFactory.AddSerilog();

    Log.Logger = logger.CreateLogger();

    app.UseCors("CorsPolicy");
    app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)

我的appsettings有一节:

"Logging": {
  "logstashServer": "http://192.168.0.6:8101",
  "IncludeScopes": false,
  "Serilog": {
    "MinimumLevel": {
      "Default": "Error",
      "Override": {
        "Microsoft": "Error",
        "Microsoft.AspNetCore.Hosting": "Error",
        "Microsoft.AspNetCore.Mvc": "Error",
        "System": "Error"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我都会在控制台和logstash中看到,而不是记录很多不需要的信息,如:

[14:27:54 INF]执行的操作方法MyApp.Controllers.LoggerController.Post(MyApp),返回结果Microsoft.AspNetCore.Mvc.OkResult 0.0771ms.
MyApp> [14:27:54 INF]执行HttpStatusCodeResult,设置HTTP状态代码200
MyApp> [14:27:54 INF]执行操作MyApp.Controllers.LoggerController.Post(MyApp)2.0855ms …

c# serilog asp.net-core

15
推荐指数
2
解决办法
2万
查看次数

使用带有或不带有 Microsoft.Extensions.Logging 的 Serilog 更好吗?

我正在使用 .NET 6 构建一个 API,并计划使用 Serilog 作为记录器。根据https://onloupe.com/blog/serilog-vs-mel/有两种可能性:

  • 专门使用 Serilog
  • 使用 Microsoft.Extensions.Logging 作为日志 API + Serilog 作为日志框架

一方面,专门使用 Serilog 的缺点是我的代码库中的所有内容都将依赖于 Serilog,因此将其与 Microsoft.Extensions.Logging 结合使用应该提供更大的灵活性。

另一方面,在https://github.com/serilog/serilog-extensions-logging上,他们明确建议对 .NET Core 项目使用https://github.com/serilog/serilog-aspnetcore :

ASP.NET Core 应用程序应该更喜欢 Serilog.AspNetCore 和 UseSerilog()。

有谁知道这个建议的原因,它在灵活性方面看起来与我相矛盾?

serilog microsoft.extensions.logging

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

Serilog topshelf集成无法正常工作

我正在尝试使用Topshelf和Serilog(分别为Serilog.Extras.Topshelf包)为我的Windows服务设置简单的日志配置.

HostLogger.UseLogger(new SerilogHostLoggerConfigurator(new LoggerConfiguration()
                .WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log")
                .WriteTo.ColoredConsole()
                .MinimumLevel.Debug()
                .CreateLogger()));
HostFactory.Run(x => {
            x.UseSerilog();
            ...
Run Code Online (Sandbox Code Playgroud)

该服务运行正常,但没有输出,也没有输出到控制台或指定的日志文件(我可以看到正在创建一个但它仍然是空的).有没有人使用这两个框架?

c# logging windows-services topshelf serilog

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

解决错误 - 无法解析"Serilog.ILogger"类型的服务

我试图在ASP.NET核心应用程序(.NET框架)中实现SeriLog

以下是我目前执行的步骤 -

1)在Project.json中添加了以下引用

"Serilog": "2.2.0",
"Serilog.Extensions.Logging": "1.2.0",
"Serilog.Sinks.RollingFile": "2.0.0",
"Serilog.Sinks.File": "3.0.0"
Run Code Online (Sandbox Code Playgroud)

2)在Startup类的构造函数中添加以下行 -

Log.Logger = new LoggerConfiguration()
           .MinimumLevel.Debug()
           .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
           .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

3)在Startup类的configure方法中添加以下行 -

loggerFactory.AddSerilog();
Run Code Online (Sandbox Code Playgroud)

4)将记录器注入HomeController,如下所示 -

ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }
Run Code Online (Sandbox Code Playgroud)

5)在About操作中,尝试记录此类异常 -

public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";

        try
        {
            throw new Exception("Serilog Testing");
        }
        catch (System.Exception ex)
        {
            this.logger.Error(ex.Message);
        }

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

在运行我的应用程序时,我收到以下错误 -

System.InvalidOperationException:尝试激活'AspNetCore_SeriLog_trial1.Controllers.HomeController'时,无法解析类型'Serilog.ILogger'的服务.在Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance
[TInstance]的lambda_method(Closure,IServiceProvider,Object [])上的Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)IServiceProvider serviceProvider,Type implementationType),位于Microsoft.AspNetCore.Mvc.Inv.Inter.ControllerActionInvoker.d__26的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext context)中的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create(ControllerContext controllerContext). .MoveNext()

有人可以帮我这个吗?Serilog缺少任何配置?

serilog asp.net-core-mvc asp.net-core

14
推荐指数
3
解决办法
1万
查看次数