.net 核心 6 中的 NLog HttpTarget

NLog HttpTarget in .net core 6

我休息 Api 谁需要将日志发送到中央 api。 我正在使用 NLog 登录 .netcore 6,并使用 Http Target 将日志发送到中央日志记录 api:


这就是我在 app.config.json

中调整 Http 目标的方式

"Http": { "type": "HTTP", "URL": "https://localhost:7217/Log/*", "IgnoreSslErrors": "true", "layout": { "type": "JsonLayout", "attribute": [ { "sourcetype": "_json" }, { "host": "${machinename}" }, { "event": { "type": "JsonLayout", "attribute": [ { "level": "${level:upperCase=true}" }, { "source": "${logger}" }, { "thread": "${threadid}" }, { "message": "${message}" }, { "utc": "${date:universalTime=true:format=yyyy-MM-dd HH\:mm\:ss.fff}" } ] } } ] } } },


在中央服务中我创建了接收日志的方法:

    [HttpPost("LogsEntry")]
    [Consumes(MediaTypeNames.Application.Json)]

    public async Task<ActionResult> PostLogsEntryAsync([FromBody] Event rt)
    {
      ...
    }

我必须在中央 Api 方法中期望的 c# 对象(事件)是什么?如何使用 NLog 捕获 Http Target 发送的事件日志,我的事件对象应该具有哪些属性? 在 Nlog 中找不到很多关于 HttpTarget 的信息。

what properties should my Event object have?

答案是:由你决定。 HTTP 目标不会以 NLog 确定的格式发送固定消息。相反,您在 layout 属性 日志消息的字段中定义自己。

示例

假设我们的目标配置如下所示:

"http": {
  "type": "HTTP",
  "url": "https://localhost:7065/Log",
  "IgnoreSslErrors": "true",
  "contentType": "application/json",
  "layout": {
    "type": "JsonLayout",
    "attributes": [
      {
        "name": "level",
        "layout": "${level:upperCase=true}"
      },
      {
        "name": "source",
        "layout": "${logger}"
      },
      {
        "name": "thread",
        "layout": "${threadid}"
      },
      {
        "name": "message",
        "layout": "${message}"
      },
      {
        "name": "utc",
        "layout": "${date:universalTime=true:format=yyyy-MM-dd HH\:mm\:ss.fff}"
      }
    ]
  }
}

那么相应的 Event 模型将如下所示:

public class Event
{
    public string Level { get; set; }

    public string Source { get; set; }

    public string Thread { get; set; }

    public string Message { get; set; }

    public string Utc { get; set; }
}