如何从命令行使用 Serilog app.config 将 HelloWorld 写入控制台

How do I write HelloWorld to a console with Serilog app.config from command line

我有一个供应商告诉我他们支持 Serilog 中的 App.config 文件,因此我可以更改日志的最低级别,因为他们的(测试版)产品正在填满文件系统并使其崩溃。

我认为他们没有正确实施,因为我在他们的发布库中没有看到任何 App.config 文件。我的理解是他们需要更改他们的记录器以也指向 App.config 否则无论我放在那里它都不会工作。

所以我想我会尝试测试一个简单的文件,用 app.config 文件编写 hello world,看看我能用它做什么。当我在代码中定义了记录器时,这工作得很好,但是一旦我添加了 app.config 文件,记录器就停止工作了。

在我桌面上的一个文件夹中,我有供应商提供的 Serilog dll 文件,我的 2 个文件也粘贴在下面,hw.cs 和 app.config。由于我的测试系统没有 Visual Studio 或互联网访问权限,因此我正在从命令行进行编译和 运行ning。

这个有效: csc.exe hw.cs /r:Serilog.dll /r:Serilog.Sinks.Console.dll /r:Serilog.Settings.AppSettings.dll

当我 运行 我的 hw.exe 文件时,我只看到 console.writeline 评论(第 1 步、第 2 步等)而不是记录器评论。

我是否需要做一些特殊的事情,以便我的 hw.cs 文件知道 App.config 文件的位置?我有正确的 dll 吗?

感谢您对此的任何帮助。

代码hw.cs如下:

using System;
using Serilog;

namespace SerilogExample
{
    class HelloWorld
    {
        static void Main()
        {
            Console.WriteLine("Step 1");
            Log.Logger = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .CreateLogger();

            Console.WriteLine("Step 2");
            Log.Information("Hello world");

            Console.WriteLine("Step 3");
            int a = 10, b = 0;
            Log.Debug("Display a and b: {A} and {B}", a, b);
            Console.WriteLine("Step 4");

            Log.Error("---pretend something went wrong");
            Console.WriteLine("Step 5");

            Log.CloseAndFlush();
        }
    }
}

App.config 如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="serilog:minimum-level" value="Debug" />
    <add key="serilog:using:Console" value="Serilog.Sinks.Console" />
    <add key="serilog:write-to:Console" />
  </appSettings>
 </configuration>

您不必在上面的代码中做任何特殊的事情,但在 .NET 中,App.config 文件必须与您的应用程序可执行文件位于同一文件夹中,并且必须命名为 NameOfYourApp.exe.config 让它工作。

在您的情况下,该文件应该被调用 hw.exe.config 以便框架加载它。


更新:尝试启用 SelfLog 以查看 Serilog 本身是否有问题:

Serilog.Debugging.SelfLog.Enable(
    msg => Console.WriteLine("Error from Serilog: {0}", msg));

这是我看到的 运行 您的代码与 hw.exe.config 在同一文件夹中:


ps:Serilog 有两个主要选项可以通过文件配置设置:App.config(通过Serilog.Settings.AppSettings) and appsettings.json (via Serilog.Settings.Configuration)。现代 apps 使用后一种。