标签: serilog-exceptions

Serilog 不同级别的不同接收器

我有以下一段 C# 代码,用于使用多个接收器(控制台和文件)编写日志,如何限制控制台仅记录(信息、警告和错误)和文件以记录所有内容。

var outputTemplate = "[{Level:u3}] {Message:lj}{NewLine}{Exception}";

// Logger  

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Console(outputTemplate: outputTemplate, theme:SystemConsoleTheme.Literate)
    .WriteTo.File($"logs/log-{DateTime.Now:yyyy-MM-dd_HH:mm:ss.fff}.log")              
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

serilog .net-core serilog-exceptions

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

如何在 appsettings.json 中配置 Serilog.Exceptions.SqlServer

我正在使用 appsettings.json 来配置 Serilog。我补充说Serilog.Exceptions,这就像一个魅力。

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Settings.Configuration", "Serilog.Exceptions" ],
    "MinimumLevel": {
        "Default": "Information",
        "Override": {
            "Microsoft": "Warning",
            "System": "Warning"
        }
    },
    "WriteTo": [
        { "Name": "Console" },
        {
            "Name": "File",
            "Args": {
                "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt",
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception} {Properties:j}",
                "rollingInterval": "Day"
            }
        }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId", "WithExceptionDetails" ]
}
Run Code Online (Sandbox Code Playgroud)

但是由于我使用的是 Sql Server 和 EF Core,文档说我还必须配置Serilog.Exceptions.SqlServerSerilog.Exceptions.EntityFrameworkCore.

根据此文档,必须将其添加到浓缩器中。在 C# 代码中,这将是:

.Enrich.WithExceptionDetails(new DestructuringOptionsBuilder()
    .WithDefaultDestructurers()
    .WithDestructurers(new[] { new …
Run Code Online (Sandbox Code Playgroud)

serilog serilog-exceptions

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

如何为我的项目中的每个命名空间配置具有不同日志级别的 Serilog?我想通过 application.json 配置文件来完成

我们正在编写新的日志记录功能并将其注入到我们现有的服务中。

以下是我们的做法:

1) 使用 Program.cs 中的 UseSerilog() 调用设置 Serilog

2) 在 appsettings.json 中设置 Serilog 配置以设置写入日志文件的接收器。

3) 编写了一个 Facade 自定义 Logger 类,它使用 Serilog 全局 Log 实例在内部进行日志记录。

public class MyLogger<T> : IMyLogger<T>
public MyLogger()
    {
        _logger = Log.ForContext(typeof(T));
    }
public void LogInformation(Exception ex)
    {
        _logger.Information(ex.Message);
    }
Run Code Online (Sandbox Code Playgroud)

4) 通过 DI 将 IMyLogger 注入到我现有的所有服务中

5)在ConfigureServices()中注册所有服务(Logger、Project相关服务)

一切正常。但我想为应用程序中的不同命名空间设置不同的日志级别,以便在生产中我可以在配置中简单设置仅 4-5 个重要的核心命名空间,其日志记录方法调用 (MyLogger.LogInformation()) 将发送到日志文件。

像下面这样的事情可能吗?因为 MyLogger 是记录日志的类。但如果调用来自 MyProject.CartManager 命名空间,那么它应该根据示例中下面的配置自动记录。

请分享您的想法。

例如:

"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": {
  "Default": "Information",
  "Override": {
    "Microsoft": "Warning",
    "System": "Information",
    "MyProject.Inventory": …
Run Code Online (Sandbox Code Playgroud)

serilog serilog-exceptions

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

asp.net core - 从 appsettings.json 设置 Serilog.Exceptions

我需要使用 Serilog.Exceptions 包来捕获异常。Serilog 是从 appsettings.json 读取的

{
    "Serilog": {
        "Using": [
            "Serilog.Sinks.RollingFile",
            "Serilog.Sinks.Seq"
        ],
        "WriteTo": [
            {
                "Name": "RollingFile",
                "Args": {
                    "restrictedToMinimumLevel": "Debug",
                    "pathFormat": "myPath\\log-{Date}.log"
                }
            },
            {
                "Name": "RollingFile",
                "Args": {
                    "restrictedToMinimumLevel": "Error",
                    "pathFormat": "myPath\\error-{Date}.log"
                }
            },
            {
                "Name": "Seq",
                "Args": {
                    "serverUrl": "myUrl",
                    "apiKey": "myApiKey"
                }
            }
        ],
        "Enrich": [
            "FromLogContext",
            "WithMachineName",
            "WithThreadId"
        ],
        "Properties": {
            "Application": "myApplicationName"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的startup.cs中

var logger = new LoggerConfiguration()
    .Enrich.WithExceptionDetails()
    .ReadFrom.Configuration(Configuration)
    .CreateLogger();

Log.Logger = logger;
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我是否需要在 Serilog.Exceptions 包的 appsettings.json …

c# exception serilog asp.net-core-2.0 serilog-exceptions

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

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 和 PowerShell 实现 Hello World

我想了解如何在 PS 中使用 SeriLog。

这是一个有效的代码示例:

$SeriLog = Add-Type -Path "C:\Program Files\PackageManagement\Serilog.2.10.0\lib\net46\Serilog.dll" -PassThru 
$SeriLog_Sink_Console = Add-Type -Path "C:\Program Files\PackageManagement\Serilog.Sinks.Console.3.1.1\lib\net45\Serilog.Sinks.Console.dll" -PassThru

$SeriLog_Config = New-Object Serilog.LoggerConfiguration
$SeriLog_Config = [Serilog.Configuration.LoggerSinkConfiguration]$SeriLog_Config_Sink = $SeriLog_Config.WriteTo
[Serilog.Log]::Logger = [Serilog.ConsoleLoggerConfigurationExtensions]::Console($SeriLog_Config_Sink).CreateLogger()
[Serilog.Log]::Information("Logging started")
Run Code Online (Sandbox Code Playgroud)

根据 dotnet SeriLogs 网站上列出的示例,我不明白的是为什么我的所有接收器都丢失了。

例子:

$SeriLog = Add-Type -Path "C:\Program Files\PackageManagement\Serilog.2.10.0\lib\net46\Serilog.dll" -PassThru 
$SeriLog_Sink_Console = Add-Type -Path "C:\Program Files\PackageManagement\Serilog.Sinks.Console.3.1.1\lib\net45\Serilog.Sinks.Console.dll" -PassThru

$SeriLog_Config = New-Object Serilog.LoggerConfiguration
$SeriLog_Config.WriteTo.Console()
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

InvalidOperation:方法调用失败,因为 [Serilog.Configuration.LoggerSinkConfiguration] 不包含名为“Console”的方法。

这在某种程度上是有道理的,因为我可以看到它丢失了,但我不明白为什么?我已经导入了两个 DLL。我想对我来说,在理解如何在 PS 中使用 DLL 方面我还是个新手。我的运气要好得多,并且使用 Log4Net 拥有一个可靠工作的模块,但我正在尝试迁移到更现代的东西,并且我正在绞尽脑汁试图了解如何集成各种接收器,如果公共示例dotnet 不翻译为 PS。

JFYI,我正在使用 PS 7.1,以防万一。

.net powershell serilog serilog-exceptions

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

Serilog 不创建日志文件

我们正在使用下面的一段 serilog 代码,它将事件写入控制台和文件,文件和控制台日志记录在我的机器上工作正常,但在其他开发人员机器上控制台日志记录工作,但文件日志记录不起作用,这增加了奇怪之处不过,“logs”文件夹已创建。是否需要进行任何额外的设置?

   public static void SetupLogger()
        {
            //var outputTemplate =   "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}";
            var outputTemplate = "[{Level:u3}] {Message:lj}{NewLine}{Exception}";

            // Logger  
            //var outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u4}] | {Message:l}{NewLine}{Exception}";
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Verbose()
                .WriteTo.Console(outputTemplate: outputTemplate, theme:SystemConsoleTheme.Literate,restrictedToMinimumLevel:LogEventLevel.Information)
                .WriteTo.File($"logs/log-{DateTime.Now:yyyy-MM-dd_HH:mm:ss.fff}.log")              
                .CreateLogger();

        }
Run Code Online (Sandbox Code Playgroud)

serilog .net-core serilog-exceptions

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