如何从命令行使用 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 使用后一种。
我有一个供应商告诉我他们支持 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 使用后一种。