标签: serilog

使用 Serilog 记录通用对象

是否可以登录传入参数为通用参数的方法?例如

public async Task<TResult> Handle(TQuery query)
{
    var watch = Stopwatch.StartNew();
    var result = await _handler.Handle(query);
    watch.Stop();
    Serilog.Log.Logger.Information("Processed {@" + query.GetType().Name + "} in {Elapsed} ms",
        query.GetType().Name, watch.ElapsedMilliseconds);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在上面,我在模板中使用字符串连接,但我不确定这是最佳实践。还有另一种方法来记录传入的对象吗?

serilog

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

Serilog 日志记录库可以在 .net WPF 应用程序中工作吗?

我有一个 .Net C# WPF 应用程序。我正在尝试将滚动日志添加到应用程序中。在 Asp.Net 应用程序中,我们之前使用过 Serilog 包。

Serilog 是否适用于 .Net 桌面(非 asp.net)应用程序?我用谷歌搜索了一下,发现有一些与此相关的问题,但尚不清楚它们是否真正得到解决。

我的 Serilog Logger 的初始化如下所示:

string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs");

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

我收到“RollingLog()”的以下编译错误。

错误 CS1061“LoggerSinkConfiguration”不包含“RollingFile”的定义,并且找不到接受“LoggerSinkConfiguration”类型的第一个参数的扩展方法“RollingFile”(您是否缺少 using 指令或程序集引用?)

如何将 git 与 WPF 一起使用?

.net c# wpf serilog

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

Serilog - MaximumLoggingLevel 信息显示日志中的每个请求 - 这正常吗?

好的,我们在 Web 应用程序中使用 Serilog 并将其发布到 SEQ。(该网站是经典 ASP 和 .NET 的混合体,但我们只有 .NET 中的 Serilog 调用)

 // create the logger
        Log.Logger = new LoggerConfiguration()
          .MinimumLevel.ControlledBy(_levelSwitch)
          .WriteTo.Seq(seqIp)
          .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

当我将 MaximumLoggingLevel 配置为“信息”、“调试”或“详细”时,每个GET 或 POST 都会被扔进日志中,数百个......

甚至无需调用 log.Information...、log.Debug... 或 log.Verbose。它只是将所有可能的信息扔给 SEQ。

以下是被放入 SEQ 中的一些信息。这只是“信息”,没有我明确调用来记录的内容......

这是正常功能吗?

(我现在将其设置为“警告”,因此这些多余的信息不会阻塞用户界面)

序列用户界面

asp.net error-logging serilog

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

Serilog 记录到控制台但不记录到文件

我有以下记录器配置和相关类如下。预期的日志消息如下:

2019-03-06 19:49:56.417 +05:30 [INFORMATION] [Main] Start
2019-03-06 19:49:56.435 +05:30 [INFORMATION] [Test1] Test1 logg
Run Code Online (Sandbox Code Playgroud)

我在控制台中看到了两个日志消息。但我只看到文件中的第一个日志。

namespace SerilogTest
{
    public static class MyLogger
    {
        public static ILogger getLogger(String className)
        {
            string logTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u}] [{SourceContext}] {Message}{NewLine}{Exception}";

            Log.Logger = new LoggerConfiguration()
                .WriteTo.Console(outputTemplate: logTemplate)
                .WriteTo.File("log.txt", outputTemplate: logTemplate)
                .CreateLogger()
                .ForContext("SourceContext", className);

            return Log.Logger;
        }    
    }

    public class Program
    {
        private static ILogger Log = MyLogger.getLogger("Main");

        private static void Main(String[] args)
        {
            Log.Information("Start");
            Test1 t1 = new Test1();
            Console.ReadKey();
        }
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c# serilog

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

Docker-compose不读取环境变量将日志写入Elasticsearch

我正在设置 docker-compose.yml 文件来读取 docker 映像的环境变量。我的宿主项目中引用了 serilog.sinks.elasticsearch nuget 包。

如果我在 Visual Studio 中使用 appsettings.json 运行该项目,它会读取设置并将日志发送到 Elasticsearch,但不通过 docker-compose。

docker-compose.yml docker镜像的环境规范:

environment:
      - serilog:MinimumLevel=Verbose
      - serilog:using=Serilog.Sinks.Elasticsearch
      - serilog:WriteTo:Elasticsearch.nodeUris=http://localhost:9200
Run Code Online (Sandbox Code Playgroud)

本地 appsettings.json 有效。

"Serilog": {
        "MinimumLevel": "Debug",
        "WriteTo": [
            {
                "Name": "Elasticsearch",
                "Args": {
                    "nodeUris": "http://localhost:9200"
                }
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

docker-compose 中设置的MinimumLevel 受到尊重。

如何设置 docker-compose.yml 来读取接收器并将日志发送到elasticsearch数据库?

elasticsearch serilog .net-core docker-compose

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

如何在 Windows 服务中初始化 Serilog?

我有以下问题。我希望能够Serilog在 Windows 服务中使用,但我不知道它应该在哪里初始化:

目前我在我的初始化它Main

using Serilog;

public static void RunService() {
    Log.Logger = new LoggerConfiguration()
      .WriteTo.RollingFile([some path])
      .CreateLogger();

    MyService daemon = new MyService();
    Log.Information("Service initialized")

    ServiceBase[] services;
    services = new ServiceBase[] {
        service
    };
    Log.Information("Before running the service");
    ServiceBase.Run(services);
}

static void Main(string[] args) {
   RunService();
}
Run Code Online (Sandbox Code Playgroud)

服务

public class MyService:ServiceBase{
   protected override void OnSessionChange(SessionChangeDescription changeDescription) {
    Log.Information("session changed");
   } 
   protected override void OnStart(string[] args) {
     Log.Information("Started service");
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,为了SerilogMain运行服务集合的服务和目标服务中使用它应该如何完成?

.net windows-services initialization serilog

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

使用serilog关闭mvc请求登录asp.net core 2.2

我正在使用Serilog.Extensions.Logging.File登录文件。

这是我的appsettings.json文件:

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Information",
      "System": "None",
      "Microsoft": "None"
    }
  },
  "LoggingFile": {
    "IncludeScopes": false,
    "pathFormat": "C:/logs/APILogs-{Date}.log",
    "LogLevel": {
      "Default": "Trace",
      "System": "None",
      "Microsoft": "None"
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的 Startup.cs 代码:

public void Configure(
            IApplicationBuilder app, 
            IHostingEnvironment env, 
            IApiVersionDescriptionProvider provider,
            ILoggerFactory loggerFactory)
        {
            // Removed other codes
            loggerFactory.AddFile(Configuration.GetSection("LoggingFile"));
        }
Run Code Online (Sandbox Code Playgroud)

但它仍然记录 mvc 请求信息,如下所示:

2019-09-21T13:28:59.6337460+05:30 80000019-0004-ff00-b63f-84710c7967bb [INF] 请求开始 HTTP/1.1 GET http://localhost:53534/api/values ()

2019-09-21T13:28:59.8309629+05:30 80000019-0004-ff00-b63f-84710c7967bb [INF] 请求在 202.16ms 200 (791a596a) 完成

2019-09-21T13:29:00.1500727+05:30 8000001a-0004-ff00-b63f-84710c7967bb [INF] 请求开始 …

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

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

更改调试字体颜色 - Serilog C# .NET Core 3.1 Jetbrains Rider Mac OSX

Serilog我刚刚学习了与 C# .Net Core 3.1 Web 应用程序结合 使用的教程。

目前一切正常,但我注意到调试消息的字体颜色是黑色,并且与runRider (Mac) 中窗格的背景颜色冲突。

运行窗格

这是我的appsettings.json如果有帮助:

{
  "AllowedHosts": "*",
  "Serilog": {
    "Using": [],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "Logs/log.txt",
          "outputTemplate": "{Timestamp:G} {Message}{NewLine:1}"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

c# macos serilog asp.net-core rider

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

HttpContext.TraceIdentifier 始终相同(和 Guid)

我正在为我的 .NET Core webapi 设置日志记录,并希望为一个请求拥有一个唯一的 ID。

经过一番谷歌搜索后,我发现 Serilog 用于HttpContext.TraceIdentifier此目的,它应该看起来像“0HL0GJPLR7AOD”。

如果我在控制器方法中设置一个断点,我会得到HttpContext.TraceIdentifier一个 Guid,更糟糕的是,它每次都相同,而不是每个请求一个(800000ad-0002-fb00-b63f-84710c7967bb)。

这也是在 serilog 中显示为“RequestId”的内容,但我的主要问题是为什么不是HttpContext.TraceIdentifier“某些文本”格式以及为什么每个请求都相同?

serilog asp.net-core

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

如何将 Serilog 添加到单元测试的服务集合中

在我们的 .Net Core 3.1 项目中,我们使用 Serilog 进行日志记录

在我的测试设置中,我创建了一个 ServiceCollection,以便我可以使用服务集合 \ - 提供程序来更新我在测试中使用的类。我有一个同时使用 DbContext 和 Serilog 记录器的存储库。

using Serilog;
using Microsoft.EntityFrameworkCore;

namespace MyApp.Persistency
{
    public class MyRepository : IMyRepository

{
    private readonly DataContext _dataContext;
    private readonly ILogger _logger;

    public OpvragenOnbekendeBurgerRegistratieRepository(DataContext dataContext, ILogger logger)
    {
        _dataContext = dataContext;
        _logger = logger;
    }
...
}
Run Code Online (Sandbox Code Playgroud)

在我的测试课中:

    [TestInitialize]
    public void Initialize()
    {
         var diCollection =
         new ServiceCollection()
             .AddSingleton(new SqlConnectionOption(_connectionstring))
             .AddDbContext<DataContext>(
                options =>
                {
                   options.UseSqlServer(_connectionstring);
                }
              )
              ...               
              xxx Add some kind of Serilog registration …
Run Code Online (Sandbox Code Playgroud)

c# mstest serilog .net-core

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