簡體   English   中英

發布 ASP.NET 核心時 Serilog 不記錄

[英]Serilog not logging when published ASP.NET core

我將 Serilog 配置為在具有 ASP.NET 核心(運行 Core 2.1)的 WebApi 上寫入 MSSQL 表和文件(以嘗試確定發生了什么)。

我將 Serilog 日志添加到我的startup.cs ,如下所示;

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);

其中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;";

當使用 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();
    }

所以本地“發布評論”被寫入我的文件和 DbSchema。

但是,當我發布到我的服務器時,上面的“發布評論”條目也沒有寫入。

兩者似乎都在從 EF 和路由等添加信息條目時工作,但當我專門嘗試編寫條目時卻沒有?

任何人都可以告訴我這里的問題可能是什么嗎?

當前的 nuget 版本是;

Serilog 2.7.1
Serilog.AspNetCore 2.1.1
Serilog.Sinks.MSSqlServer 5.1.2
Serilog.Sinks.File 4.0.0

另外,我的appsettings.json有以下appsettings.json

  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Release": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }

更新

如文檔中所示:

默認級別 - 如果未指定 MinimumLevel,則將處理信息級別和更高級別的事件。

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


默認情況下,在Release版本中禁用LogDebug ,這可能是您的發布版本。

請嘗試

_logger.LogInformation("Posting Review");

對我來說,解決方案是從appsettings.json刪除"restrictedToMinimumLevel": "Information"

它在appsettings.Development.json完全相同,並且在開發環境中運行良好。

對我來說,我已經配置了以上所有內容。 它在我的本地環境中記錄 db,因為它在開發環境中不起作用。 問題是由於身份驗證。 我正在為我的應用程序使用 azure 廣告身份驗證,它限制了 serilog 寫入服務器。 因此,在我的 program.cs 文件中,我添加了以下設置。

程序.cs

var sqlSinkOptions = new MSSqlServerSinkOptions
{
      TableName = "MyLogTableName",
      UseAzureManagedIdentity = true,  // This line
      AzureServiceTokenProviderResource = "https://database.windows.net/" // This line
};

之后,我可以看到開發環境中也在發生日志記錄。 可能這對某些人有所幫助。 快樂編碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM