标签: serilog

带有自定义模板和 JSON 格式化程序的 Serilog

我在 ASP.NET Core 2.1 中使用 Serilog,并通过appsettings.json.

默认模板不包含{SourceContext},所以我使用自己的包含它的模板。但我也希望使用 JSON 进行结构化日志记录。

我在 Serilog wiki 的某个地方阅读了我无法同时指定formatter(对于 JSON 输出)的内容outputTemplate

所以我不能这样做,例如:

"outputTemplate": "{Timestamp:yyyy-MM-dd} {Level:u3} {SourceContext} {Message:lj}{NewLine}{Exception}",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
Run Code Online (Sandbox Code Playgroud)

那么如何获得JSON输出,同时获得SourceContext我需要的数据呢?

serilog asp.net-core asp.net-core-2.1

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

如何从 Serilog 中排除特定的异常类型?

我正在使用 Serilog 来记录有关asp.net core 2.1托管在 IIS 上的应用程序的信息。发生异常时,我会收到电子邮件通知。问题是,一些异常发生时根本不会损害应用程序,我不想每次发生时都被注意到。

Serilog 中有没有办法从记录中排除特定的异常类型?

编辑 :

这是我在 Program.cs 中配置 Serilog 的方式:

using System;
using System.Data;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;
using Serilog.Sinks.MSSqlServer;

namespace WindZone_Warehouse_Mobile_App
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                .AddJsonFile(Environment.CurrentDirectory + "/appsettings.json")
                .Build();

            var columnOptions = new ColumnOptions {
                AdditionalDataColumns = new System.Collections.ObjectModel.Collection<DataColumn>
                {
                    new DataColumn {DataType = typeof (string), ColumnName = "email", DefaultValue = "myemail@myemail.com", MaxLength = 4000}, …
Run Code Online (Sandbox Code Playgroud)

c# exception serilog asp.net-core

6
推荐指数
2
解决办法
4193
查看次数

带有类名、方法名的 Serilog 日志记录

我在我的项目 Angular、web api、EF 中使用了 serilog 和 SEQ。我对两者都是新手。

1) 如何确保每次我写错误、信息、调试时都应该包含 ClassName.Method Name。我知道我必须创建 Enrich 但不确定如何获取 ClassName.Method Name

例如

Class Test
{
  public void testing(){
  // logger.Error("Error ....");}
}
Run Code Online (Sandbox Code Playgroud)

现在,当我看到日志时,它应该显示“29/09/2012 10:00:00, Test=>testing Error .....”

在,短 DateTime、ClassName、MethodName 和 Message

logging serilog

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

Serilog 输出有效的 JSON 到文件

如果有人可以请帮助我进行 Serilog 配置。我想知道是否可以将滚动文件接收器配置为始终输出具有有效 JSON 的文件。文件结构必须是一个 JSON 项数组,如下所示:

如果日志文件为空,则内容应为:

[]
Run Code Online (Sandbox Code Playgroud)

如果日志文件存储单个项目,则内容应为:

[{some.json}]
Run Code Online (Sandbox Code Playgroud)

如果日志文件存储n个项目,那么内容应该是:

[{some json}, {...}, {n-th json}]
Run Code Online (Sandbox Code Playgroud)

日志文件不应该看起来像:

[{some json}, 
Run Code Online (Sandbox Code Playgroud)

或者

{some json}
{some json}
Run Code Online (Sandbox Code Playgroud)

或者

{some json},
{some json},
Run Code Online (Sandbox Code Playgroud)

提前致谢。

serilog

6
推荐指数
0
解决办法
257
查看次数

是否可以使用 if 语句优雅地配置 Serilog?

我的 Serilog 配置代码如下所示:

Log.Logger = new LoggerConfiguration()
    .Enrich.WithExceptionDetails()
    .Enrich.FromLogContext()
    .MinimumLevel.Warning()
//  .MinimumLevel.Override("Microsoft", LogEventLevel.Verbose)
//  .MinimumLevel.Override("System", LogEventLevel.Verbose)
//  .MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Verbose)
    .WriteTo.Console( outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Literate )
//  .WriteTo.File()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

我想在运行时更改此配置,不幸的是,因为 Serilog 使用了“流畅”风格的 API,这使它有些混乱。例如,如果我想在运行时启用或禁用控制台和文件日志记录:

Boolean enableConsoleLogging = ...
Boolean enableFileLogging = ...

LoggerConfiguration builder = new LoggerConfiguration()
    .Enrich.WithExceptionDetails()
    .Enrich.FromLogContext()
    .MinimumLevel.Warning();

if( enableConsoleLogging )
{
    builder = builder
        .WriteTo.Console( outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Literate )
}

if( enableFileLogging )
{
    builder = builder
        .WriteTo.File( ... )
}
Log.Logger = builder.CreateLogger(); …
Run Code Online (Sandbox Code Playgroud)

c# fluent serilog

6
推荐指数
2
解决办法
4056
查看次数

Serilog 两次写入日志

我使用SerilogElasticsearch sink 的配置如下:

Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Verbose()
                    .MinimumLevel.Override("Microsoft", LogEventLevel.Verbose)
                    .Enrich.FromLogContext()
                    .Enrich.WithExceptionDetails()
                    .Enrich.WithProperty("Application", "abc")
                    .Enrich.WithProperty("Environment", env.EnvironmentName)
                    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(Configuration["LoggingEndpoint"]))
                    {
                        AutoRegisterTemplate = true,
                        CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true) // Better formatting for exceptions
                    })
Run Code Online (Sandbox Code Playgroud)

// 然后:

services.AddLogging(loggingBuilder =>
            loggingBuilder.AddSerilog());
Run Code Online (Sandbox Code Playgroud)

但是我可以在 Kibana 上看到每个日志两次,时间戳相差几毫秒。我尝试了此处提供的解决方案,以防万一它们可能有所帮助,但没有运气。

serilog asp.net-core-2.0 kibana-6

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

安装 serilog 并在 asp .net 4.7.1 webapi 中配置

我找不到在 ASP.Net 4.7.1 WebApi 项目中安装 Serilog 的任何资源。有人可以帮我吗?有大量的 .Net Core 资源,但这无济于事。

asp.net asp.net-web-api serilog

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

Fluentbit 在 kubernetes 中收集到 Elasticsearch 的 Serilog 日志无法正确解析 Json

在 Kubernetes (Minikube) 上使用 EFK 堆栈。有一个使用 Serilog 的 asp.net 核心应用程序以 Json 的形式写入控制台。日志确实会发送到 Elasticsearch,但它们到达未解析的字符串,进入“日志”字段,这就是问题所在。

这是控制台输出:

{
    "@timestamp": "2019-03-22T22:08:24.6499272+01:00",
    "level": "Fatal",
    "messageTemplate": "Text: {Message}",
    "message": "Text: \"aaaa\"",
    "exception": {
        "Depth": 0,
        "ClassName": "",
        "Message": "Boom!",
        "Source": null,
        "StackTraceString": null,
        "RemoteStackTraceString": "",
        "RemoteStackIndex": -1,
        "HResult": -2146232832,
        "HelpURL": null
    },
    "fields": {
        "Message": "aaaa",
        "SourceContext": "frontend.values.web.Controllers.HomeController",
        "ActionId": "0a0967e8-be30-4658-8663-2a1fd7d9eb53",
        "ActionName": "frontend.values.web.Controllers.HomeController.WriteTrace (frontend.values.web)",
        "RequestId": "0HLLF1A02IS16:00000005",
        "RequestPath": "/Home/WriteTrace",
        "CorrelationId": null,
        "ConnectionId": "0HLLF1A02IS16",
        "ExceptionDetail": {
            "HResult": -2146232832,
            "Message": "Boom!",
            "Source": null,
            "Type": "System.ApplicationException"
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

elasticsearch serilog kubernetes asp.net-core fluent-bit

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

Serilog 多个文件 appsettings.json

我试图将 serilog 配置为写入多个文件,但没有任何运气。使用此配置它只是写入第二个文件?

{
  "AllowedHosts": "*",
  "Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "c:\\temp\\audit-.log",
          "rollingInterval": "Day",
          "restrictedToMinimumLevel": "Information"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "c:\\temp\\error-.log",
          "rollingInterval": "Day",
          "restrictedToMinimumLevel": "Error"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

或者有什么方法可以将许多记录器加载到具有来自 appsettings.json 的不同配置的软件中。像这样的东西?

var errorLogConfiguration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
    .AddEnvironmentVariables()
    .Build();

_log = new LoggerConfiguration()
    .ReadFrom
    .Configuration(errorLogConfiguration)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

c# serilog

6
推荐指数
4
解决办法
7881
查看次数

Serilog 设置刷新间隔

我在我的 ASP Core 2.2 应用程序中使用了 serilog。一切正常,但我无法设置flushToDiskInterval。例如,这意味着我想每分钟将日志刷新到磁盘,但日志会在创建时刷新。我的 Program.cs 文件:

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.File("Logs/log-{Date}.txt", buffered: true, flushToDiskInterval: TimeSpan.FromSeconds(60))
        .CreateLogger();

        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseSerilog() // Set serilog as the logging provider.
        .UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)

那么问题来了,如何设置间隔呢?

==更新==


我无法理解,但现在一切正常……我检查过,确实设置了冲洗间隔。

serilog asp.net-core

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