[英]Serilog not logging to Console
我已经在我的 asp.net 核心 web 项目中安装了: Serilog.sink.console。 当我调用 Microsoft.Extension.Logging ILogger 时,我将以下设置设置为使用 serilog:
.UseSerilog((context, loggerConfiguration) => loggerConfiguration
.ReadFrom.Configuration(context.Configuration))
我在 appsettings.json 中有以下设置可以登录控制台:
"Serilog": {
"MinimumLevel": "Error",
"WriteTo": [
{
"Name": "Console"
}
]
以下是我尝试登录到控制台的方法:
private readonly ILogger _logger; // using Microsoft.Extensions.Logging
public SalesTransaction(ILogger<Sales> logger)
{
_logger = logger;
}
Console.WriteLine("XXX");
_logger.LogError("This is an Error");
我找不到控制台/STDOut 的记录位置。 请注意,如果我使用 WriteTo File 设置并指定一个目录,则它可以正常工作。
本质上,应用程序的控制台是用于启动应用程序的命令行窗口。 除非您将其重定向到文件,否则写入其中的任何内容都会丢失。 (实际上它有点复杂)。
如果您从控制台/Windows 终端/Bash 运行网站,则写入控制台的任何内容都将显示在终端中。 如果您使用 IIS,日志将丢失,除非您更改 web.config 设置以将 SDTOUT 输出写入文件。 这在日志创建和重定向中进行了描述。 发布 ASP.NET Core 应用程序时生成的默认web.config
文件包含以下元素:
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
</aspNetCore>
默认情况下,STDOUT 输出不存储在任何地方。 将stdoutLogEnabled
设置为true
会将输出重定向到应用程序根目录下的logs\\stdout
文件夹。 链接的文章解释了如何按级别过滤或重定向到事件日志。
一般记录
您应该使用文件接收器进行生产日志记录,(即WriteTo.File
)。 这允许您自定义文件名、格式、使用滚动文件、指定最大文件大小并自动删除旧文件。 控制台日志甚至不知道文件,并且格式选项更加有限。
控制台日志记录对于故障排除很有用,并且在某些情况下,对于容器/Kubernetes 环境中的基本日志记录非常有用。 所有进程都有一个 STDIN、STDOUT 和 STDERR 流。 默认情况下,写入 STDERR 的错误会重定向到 STDOUT:
Serilog.Debugging.SelfLog.Enable(Console.Error);
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.