发布 ASP.NET 核心时 Serilog 不记录

Mat*_*ynn 3 c# serilog asp.net-core-webapi asp.net-core-2.1

我将 Serilog 配置为在具有 ASP.NET 核心(运行 Core 2.1)的 WebApi 上写入 MSSQL 表和文件(以尝试确定发生了什么)。

startup.cs按如下方式添加 Serilog 日志;

public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var log = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .WriteTo.MSSqlServer(
            DbGlobals.DevDatabase, "Logs", schemaName:DbGlobals.SchemaName)
        .WriteTo.File("Logs\\Serilog\\log.txt", rollingInterval: RollingInterval.Day)
        .CreateLogger();

    loggerFactory.AddSerilog(log);
Run Code Online (Sandbox Code Playgroud)

其中DbGlobals.DevDatbaseDbglobals.SchemaName是从配置中读取的字符串。

更新作为参考,这些值是;

DbGlobals.Schema = "MySchema";
DbGlobals.DevDatabase = "Data Source=xx.xx.xx.xx;Initial Catalog=DevDatabase;Integrated Security=False;Persist Security Info=False;User ID=LOGIN;Password=PASSWORD;MultipleActiveResultSets=true;";
Run Code Online (Sandbox Code Playgroud)

当使用 IIS Express 在本地运行并在两者debugrelease配置下运行时,两个日志记录功能都可以正常工作。例如在我的控制器中;

public class ReviewPublicController : Controller
{
    private readonly IReviewService _service;
    private readonly IMapper _mapper;
    private readonly IMailService _mailService;
    private readonly ILogger _logger;

    public ReviewController(
        IReviewService service, 
        ILogger<ReviewController> logger)
    {
        _service = service;
        _logger = logger;
    }

    [HttpPost]
    [ProducesResponseType(typeof(Review), 201)]
    [Route("")]
    public async Task<IActionResult> Post([FromBody]ReviewPostModel model)
    {
        _logger.LogDebug("Posting Review");

        ...

        return Ok();
    }
Run Code Online (Sandbox Code Playgroud)

所以本地“发布评论”被写入我的文件和 DbSchema。

但是,当我发布到我的服务器时,上面的“发布评论”条目也没有写入。

两者似乎都在从 EF 和路由等添加信息条目时工作,但当我专门尝试编写条目时却没有?

任何人都可以告诉我这里的问题可能是什么吗?

当前的 nuget 版本是;

Serilog 2.7.1
Serilog.AspNetCore 2.1.1
Serilog.Sinks.MSSqlServer 5.1.2
Serilog.Sinks.File 4.0.0
Run Code Online (Sandbox Code Playgroud)

另外,我的appsettings.json;

  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Release": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

更新

如文档中所示:

默认级别 - 如果未指定 MinimumLevel,则将处理信息级别和更高级别的事件。

所以基本上,您的配置似乎无效或被覆盖。见:https : //github.com/serilog/serilog/wiki/Configuration-Basics


LogDebugRelease构建中默认禁用,这可能是您发布的内容。

请尝试

_logger.LogInformation("Posting Review");
Run Code Online (Sandbox Code Playgroud)