繁体   English   中英

Serilog 未登录到控制台

[英]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:

  • 它始终可用,无处不在,甚至在启动期间也是如此。 任何阻止应用程序启动的错误都将写入那里。
  • 它在 Web 主机或 Serilog 启动之前可用。
  • 您可以使用它来解决 Serilog 问题,使用SelfLog ,使用Serilog.Debugging.SelfLog.Enable(Console.Error); .
  • Docker 和 Kubernetes 从容器/Pod 收集 STDOUT 输出,使其可供检查。 许多设计都依赖于此,例如使用 sidecar 容器来读取和处理应用程序的日志,而无需修改应用程序本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM