标签: serilog

Serilog 的显式日志级别而不是最小级别

有什么方法可以在 serilog 中为每个文件配置一个日志级别吗?

我知道我可以为每个“MinimumLevel”配置一个文件,但这不是我需要的。

c# serilog

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

Serilog日志文件写入时如何触发事件?

我正在尝试在我的 UWP 应用程序中显示 Serilog“logs.txt”文件的内容。我已成功显示它,但现在我希望它在创建新日志事件时自动刷新。

到目前为止,我尝试创建一个 ContentsChanged 事件侦听器来订阅本地文件驱动器中 .txt 文件中的更改。

private async void CreateFileUpdater()
{
    List<string> fileTypeFilter = new List<string>();
    fileTypeFilter.Add(".txt");
    var options = new Windows.Storage.Search.QueryOptions(Windows.Storage.Search.CommonFileQuery.OrderByName, fileTypeFilter);
    var query = ApplicationData.Current.LocalFolder.CreateFileQueryWithOptions(options);
            //subscribe on query's ContentsChanged event
    query.ContentsChanged += Query_ContentsChanged;
    var files = await query.GetFilesAsync();
}

private void Query_ContentsChanged(Windows.Storage.Search.IStorageQueryResultBase sender, object args)
{
    ReadFileAsync(); //This updates the bound variable to display in UI
}
Run Code Online (Sandbox Code Playgroud)

但是,当新的日志事件添加到日志文件时,它似乎无法正确触发。所以我想知道 Serilog 本身是否有一个我在文档中没有看到的事件,或者是否有更好的方法来检测文件中的更改或何时将内容添加到文件中。我只想调用某种事件,以便我可以触发 ReadFilesAsync() 函数来更新绑定到我的 UI 的变量。

谢谢你的帮助!

c# xaml serilog uwp

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

从 appSettings.json 配置 Serilog 时出现问题

我有一个与 appSettings.json 的 Serilog 配置有关的问题。我的项目是一个控制台应用程序,基于.Net Core 3.0。我尝试设置 Serilog 以便将日志信息写入控制台和日志文件。

当我在代码本身中配置所有内容时 - 一切都按预期工作。

但是,当我尝试从 appsettings.json 文件导入 Serilog 配置设置时,我遇到了问题,我的 ConsoleSink 工作正常,但我的 FileSink 不行。

这是我在 appsettings.json 中写入的内容:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "File",
        "Args": { "pathFormat": "Xlog.txt" }
      },
      { "Name": "Console" }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

这是相关的代码:

  IConfiguration configSerilog = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", true, true)
                .Build();


            log = new LoggerConfiguration()
                 .ReadFrom.Configuration(configSerilog)
                 .CreateLogger();


            log.Information("Initializing Serilog....");
Run Code Online (Sandbox Code Playgroud)

我的“测试日志消息”显示在我的控制台窗口中,但我没有收到日志文件。

正如我所提到的,当我在代码本身中配置 Serilog 时,它就可以工作,而不是通过应用程序设置。因此,我确实拥有创建文件的适当访问权限。

有什么想法或提示吗?

c# console-application serilog .net-core

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

Serilog 异步文件日志记录 - 如何添加滚动

我正在使用最新的Serilog.File 4.1.0Serilog.Sinks.Async. 异步日志记录有效,但我希望滚动文件。如何启用文件滚动?

我有以下内容:

 Log.Logger = new LoggerConfiguration()
                .WriteTo.Async(a =>
                {
                    a.File("logs/logs.log");
                })
                .MinimumLevel.Verbose()
                .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

.net c# serilog .net-core

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

如何将serilog中的日志写入Linux和WIndows上的同一路径?

我有一个通过appsettings.json文件配置 Serilog 的应用程序,我在 Windows 上开发该应用程序,但它部署到 Linux 上。如何将日志写入相对目录Logs/logfile.log?

仅更改部署文件夹中的 appsettings.json 是一个不错的选择吗?

现在这是我正在使用的配置:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.MSSQLServer" ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {SourceContext} [{Level}] {Message}{NewLine}{Exception}",
          "theme": "Serilog.Sinks.SystemConsole.Themes.SystemConsoleTheme::Grayscale, Serilog.Sinks.Console"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "Logs\\log-.log",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 5
        }
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)

serilog .net-core

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

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
查看次数

使用 EF Core 配置 Serilog ASP.Net Core 3.2 来记录 SQL 语句

以前,当使用时,Microsoft.Extensions.Logging我会注入,ILoggerFactory并且.UseLoggingFactory()在设置我的 DbContext 时,如下所示(为了简洁而减少);

    private readonly ILoggerFactory LoggerFactory;


    public Startup(... ILoggerFactory loggerFactory)
    {
        LoggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
    }

    public void ConfigureServices(IServiceCollection services)
    {
        var connectionString = Configuration.GetConnectionString($"DbDataContext");

        services.AddDbContext<OakfieldLeasingDataContext>(
            options => options
                .UseSqlServer(
                    connectionString,
                    x => x.UseNetTopologySuite())
                .UseLoggerFactory(LoggerFactory));
     }
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试换入Serilog,我已成功更改Program.cs如下;

    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
        .Enrich.FromLogContext()
        .WriteTo.Console(new RenderedCompactJsonFormatter())
        .WriteTo.File(new RenderedCompactJsonFormatter(), "./logs/log.ndjson")
        .CreateLogger();

        try
        {
            Log.Information("Starting up");
            CreateHostBuilder(args).Build().Run();
        }
        catch (Exception ex) …
Run Code Online (Sandbox Code Playgroud)

c# serilog entity-framework-core blazor-server-side

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

WPF 项目中的 Serilog

我正在 VS 2019 中开发 WPF .Net 项目,而不是 .Net Core。我想要记录异常。我对此有一些疑问:

  1. 我可以将 Serilog 添加到此类应用程序中吗?
  2. 我需要选择安装什么 Serilog 软件包?在 VS 的 NuGet Packager Manager 中我发现了一堆 Serilog 包。
  3. 那是多层架构项目。Sirelog 必须安装在哪一层?在数据层还是UI层?
  4. 如何设置、配置和使用Serilog?
  5. 如何全局配置 Serilog 以捕获异常并将其从任何形式的解决方案记录到文件或数据库?

我将不胜感激详细的解释和样品。

谢谢

.net c# serilog

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

使用 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
查看次数

C# Serilog 在写入文件之前压缩日志消息?

现在我们有一个架构,其中应用程序将日志记录到文件,然后 fluidd 拉取日志并将其推送到elasticsearch,因此在这种情况下,我们希望压缩日志以利用空间,serilog 是否支持在写入之前进行日志压缩它到文件??

在另一种情况下,客户可能会记录超过5mb的数据,是否可以将日志写入文件,然后通过fluidd推送到elasticsearch?我觉得它会影响并导致失败,任何想法如何将超过 5mb 或大约 10mb 的消息推送到弹性搜索。

编写的示例代码:

 .UseSerilog((hostingContext, loggerConfiguration) =>
                {
                    loggerConfiguration.MinimumLevel.Debug()
                            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                            .Enrich.FromLogContext()
                            .WriteTo.File(path: Path.Combine(Environment.CurrentDirectory, "Logs", "log.txt"),
                                rollOnFileSizeLimit: true,
                                retainedFileCountLimit: 20,
                                rollingInterval: RollingInterval.Day,
                                fileSizeLimitBytes: 10000
                                )
                            .WriteTo.Console();
                })
Run Code Online (Sandbox Code Playgroud)

c# elasticsearch fluentd serilog

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