标签: serilog

C# - Serilog - 丰富者留下空白条目

弄清楚了 Serilog 的基础知识。现在尝试添加一些丰富器,以便我可以在每个日志行中打印用户名或机器名或类名等。

这是我到目前为止的代码,

using System;
using Serilog;
using Serilog.Sinks.SystemConsole;
using Serilog.Sinks.File;
using Serilog.Enrichers;
using Serilog.Core;
using Serilog.Events;
using System.Threading;
using Serilog.Context;

var outputTemplate = "{MachineName} | {UserName} | {Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u4}] | {ClassName} | {Message:l}{NewLine}{Exception}";
var Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console(outputTemplate: outputTemplate)
    .WriteTo.File("logFile-.log",
                  outputTemplate: outputTemplate)
    .Enrich.FromLogContext()
    .Enrich.WithEnvironmentUserName()
    .Enrich.WithProperty("Version", "1.0.0")
    .CreateLogger();

Logger.Information("Hello, Serilog!");

var position = new { Latitude = 25, Longitude = 134 };
var elapsedMs = 35;

for (int i = 0; i < 5; i++) …
Run Code Online (Sandbox Code Playgroud)

c# serilog

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

How to have different log types using Serilog and ElasticSearch

I am currently trying to change our system configuration to work with Serilog (instead of working with FileBeat as a shipper to LogStash)

We are also working with the log type field (which is easy to configure in the FileBeat config file) in our various queries and for indexing out logs on Elastic.

The problem is that when using Serilog we get the default type logevent, and I didn't find where I can configure it. I want …

c# elasticsearch serilog elasticsearch-net

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

Serilog 日志记录 web-api 方法,在中间件中添加上下文属性

我一直在努力使用 serilog 记录响应正文有效负载数据,从中间件记录。我工作的WEB API核心应用,与招摇添加到终点,我的目标是为每一个终点呼叫记录到一个以.json与文件serilog(请求和响应数据)。

对于GET请求,应记录响应正文(作为属性添加到 serilog 上下文),对于 POST 请求,应记录请求正文和响应正文。我创建了中间件并设法从请求和响应流中正确检索数据,并将其作为字符串获取,但只有“RequestBody”被正确记录。

调试时,我可以看到读取请求/响应正文工作正常。

以下是 Program->Main 方法的代码摘录:

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .Enrich.FromLogContext()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

和中间件中的代码:

public async Task Invoke(HttpContext context)
{
    // Read and log request body data
    string requestBodyPayload = await ReadRequestBody(context.Request);

    LogContext.PushProperty("RequestBody", requestBodyPayload);

    // Read and log response body data
    var originalBodyStream = context.Response.Body;
    using (var responseBody = new MemoryStream())
    {
        context.Response.Body = responseBody;
        await _next(context);
        string responseBodyPayload = await …
Run Code Online (Sandbox Code Playgroud)

serilog asp.net-core asp.net-core-middleware asp.net-core-webapi

8
推荐指数
2
解决办法
6075
查看次数

混合代码和 app.config 中的 Serilog 配置

我想从代码中设置 logFileName,但我想从 app.config 文件中配置所有其他参数。如果我将一些配置放在代码中,并将一些配置放在 app.config 中,则其中一个会覆盖另一个。

这可能吗?

static private Serilog.Core.Logger CreateLogger(string logFileName)
{
    var config = new LoggerConfiguration()
                        .ReadFrom.AppSettings()
                        .WriteTo.File(logFileName, 
                                      rollingInterval: RollingInterval.Day, 
                                      rollOnFileSizeLimit: true, 
                                      fileSizeLimitBytes: 10000000, 
                                      outputTemplate: "{Timestamp:HH:mm:ss} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}")
                        .CreateLogger();

    Log.Logger = config;

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

我正在使用.Net框架472

.net c# serilog

8
推荐指数
0
解决办法
643
查看次数

Serilog 忽略 Microsoft.Extension.Logging 中的 LogLevel

我正在使用NET5ASP.NET MVC 应用程序。应用程序正在用于Serilog.AspNetCore 3.4.0日志记录

应用程序设置.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Error"
    }
  },
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console"],
    "WriteTo": [
      {
        "Name": "Console"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

程序.cs

     public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                   .UseStartup<Startup>()
                   .ConfigureLogging((hostingContext, logging) =>
                   {
                       logging.ClearProviders();                    
                   })                       
                   .UseSerilog((hostingContext, logging) =>
                   {
                      logging.ReadFrom.Configuration(hostingContext.Configuration);
                   });
            });
Run Code Online (Sandbox Code Playgroud)

我也尝试过

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                   .UseStartup<Startup>()
                   .ConfigureLogging((hostingContext, logging) =>
                   {
                       logging.ClearProviders();
                       Log.Logger = new LoggerConfiguration() …
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core

8
推荐指数
2
解决办法
7450
查看次数

Hangfire:全局添加 JobId 以记录到 Serilog

我正在尝试将 Hangfire JobId (和其他属性)添加到我的所有作业中,而不必将其添加到每个作业方法中。

在 Startup.cs 中,我添加了一个有前途的过滤器解决方案,但是我不知道如何将其应用到我的测试方法中,我什至不确定这是否是正确的方法。

启动.cs

...
GlobalJobFilters.Filters.Add(new JobLoggerAttribute());
Run Code Online (Sandbox Code Playgroud)

JobLoggerAttribute类 - 来自此处: 链接

我的任务是将 JobId 放置在列单元格当前为空白的位置,而无需手动将其添加到我的测试方法中: 在此输入图像描述

Program.cs(全局定义的Logger):

Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .WriteTo.Elasticsearch....
                .Enrich.FromLogContext()
                .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

因为我还想检索方法名称等。我添加了这个类来调用我的工作中的 Here 方法。

LoggerExtensions.cs:

    public static class LoggerExtensions
    {
        public static ILogger Here(this ILogger logger,
            [CallerMemberName] string memberName = "",
            [CallerFilePath] string sourceFilePath = "",
            [CallerLineNumber] int sourceLineNumber = 0
            )
        {
            return logger
                .ForContext("MemberName", memberName)
                .ForContext("FilePath", sourceFilePath)
                .ForContext("LineNumber", sourceLineNumber)
                ;
        }
    }
Run Code Online (Sandbox Code Playgroud)

运行测试任务:

public void RunTestTask(PerformContext context)
        {

            // instead of …
Run Code Online (Sandbox Code Playgroud)

c# serilog hangfire

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

当我在 .NET 5 中运行应用程序时,Serilog 不会创建日志 SQL 表

我有 appsettings.json 设置来自动创建日志表"autoCreateSqlTable": true

但是,我检查了 SQL,但找不到该表。我似乎无法找到导致它无法创建和记录信息的原因。

程序.cs:

public class Program
{
    public static void Main(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();

        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>().UseSerilog();
            });
}
Run Code Online (Sandbox Code Playgroud)

应用程序设置.json:

"Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "****",
          "tableName": "Log",
          "autoCreateSqlTable": true
        }
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core

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

Serilog Elasticsearch 8 接收器 - 异常:操作/元数据行 [1] 包含未知参数 [_type]

对 ElasticSearch 执行批量操作时捕获异常:

Elasticsearch.Net.ElasticsearchClientException:请求执行失败。调用:状态代码 400 来自:POST /_bulk。ServerError:类型:非法_参数_异常原因:Elasticsearch.Net.Transport1.HandleElasticsearchClientException(RequestData数据,异常clientException,IElasticsearchResponse响应)在Elasticsearch.Net.Transport1.FinalizeResponse中“操作/元数据行[1]包含未知参数[_type]” TResponse](RequestData requestData、IRequestPipeline 管道、List1 sawExceptions、TResponse 响应)位于 Elasticsearch.Net.Transport1.RequestAsync[TResponse](HttpMethod 方法、字符串路径、CancellationToken CancellationToken、PostData 数据、IRequestParameters requestParameters)位于 Serilog.Sinks.Elasticsearch.ElasticsearchSink .EmitBatchAsync(IEnumerable1 事件)

当 Serilog 尝试登录 ElasticSearch 版本 8.0 时,我收到此错误。根据文档,ElasticSearch 8.0 不再支持映射类型。

是否有任何配置可以跳过映射类型?

elasticsearch serilog serilog-sinks-elasticsearch

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

带注入的定制 Serilog 水槽?

我创建了一个简单的 Serilog 接收器项目,如下所示:

namespace MyApp.Cloud.Serilog.MQSink
{
    public class MessageQueueSink: ILogEventSink
    {
        private readonly IMQProducer _MQProducerService;
        public MessageQueueSink(IMQProducer mQProducerService)
        {
            _MQProducerService = mQProducerService;
        }
        public void Emit(LogEvent logEvent)
        {
            _MQProducerService.Produce<SendLog>(new SendLog() { LogEventJson = JsonConvert.SerializeObject(logEvent)});
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

消费微服务的启动方式如下:

        var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
        var appSettings = configurationBuilder.Get<AppSettings>();

        configurationBuilder = new ConfigurationBuilder().AddJsonFile("ExtendedSettings.json").Build();

            Host.CreateDefaultBuilder(args)
                .UseMyAppCloudMQ(context => context.UseSettings(appSettings.MQSettings))
                .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration))
                .ConfigureServices((hostContext, services) =>
                {
                    services
                        .AddHostedService<ExtendedProgService>()
                        .Configure<MQSettings>(configurationBuilder.GetSection("MQSettings"))
                })
                .Build().Run();
Run Code Online (Sandbox Code Playgroud)

appsettings.json 的 serilog 部分如下所示:

  "serilog": {
    "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console", "MyApp.Cloud.Serilog.MQSink" ], …
Run Code Online (Sandbox Code Playgroud)

c# code-injection serilog ilogger

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

在 Blazor WebAssembly 客户端应用程序中使用 Serilog 作为日志记录提供程序

我想在客户端和服务器端的 blazor web assembly net 6 应用程序中使用 serilog。在本文中,我了解了如何将日志条目中继到服务器,以便将它们写入日志文件中。

然而,在此方法中,Log静态类用于显式添加日志条目。

我想添加 serilog 作为日志记录提供程序,以便也记录异常和自动生成的信息。

在服务器端我使用

var builder = WebApplication.CreateBuilder(args);
builder.Host
    .UseSerilog((ctx, lc) =>
    {
        lc.ReadFrom.Configuration(ctx.Configuration);
    });
Run Code Online (Sandbox Code Playgroud)

这样所有的东西都会传递给serilog。

UseSerilog在 Serilog.AspNetCore 中定义。不幸的是,如果我将 Serilog.AspNetCore 添加到我的客户端项目中,则会出现以下错误:

NETSDK1082 没有可用于指定 RuntimeIdentifier“browser-wasm”的 Microsoft.AspNetCore.App 运行时包

有没有办法手动将 serilog 添加到日志记录提供程序,或者有没有办法将 Serilog.AspNetCore 包添加到客户端项目?

serilog asp.net-core blazor-webassembly

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