asp.net-core - 将自定义对象发送到自定义布局渲染器 NLog ASP.NET Core

标签 asp.net-core nlog

我需要在将错误数据保存到数据库后将错误数据打印到 NLog 文件,我想为此编写自定义布局渲染器。

[LayoutRenderer("error-data")]
public class ErrorDataLayoutRenderer : AspNetLayoutRendererBase
{
    protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
    {
        builder.Append($"{error.Id} | {error.LoggedDate} | {error.Url}");
    }
}

我想在nlog.config中写:

<target xsi:type="File" name="errors" fileName="c:\log.errors.txt"
             layout=${error-data}" />

在服务中:

var error = service.LogError(data);
Logger Logger = LogManager.GetCurrentClassLogger();
Logger.Error(error); //or something like that

error - 表示数据库中实体的类。它具有一些属性,例如:Id、LoggedDate、Summary 等。 我怎样才能得到 error 对象?

最佳答案

您可以使用 LogEventInfo 属性发送它。最简单的方法是使用流畅的界面 using NLog.Fluent;

记录:

var logger = LogManager.GetCurrentClassLogger();
var error = ..;
logger.Error().Property("prop1", error).Write(); //don't forget .Write()!

在你的目标中:

protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
{
    var error = logEvent.Properties["prop1"]; //read the property
    builder.Append($"{error.Id} | {error.LoggedDate} | {error.Url}");
}

关于asp.net-core - 将自定义对象发送到自定义布局渲染器 NLog ASP.NET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268307/

相关文章:

c# - 我如何格式化我的 nLog 布局

nlog - 使用 Nlog 将结构化日志写入 Google Stackdriver

android - Xamarin 上的 NLog 日志文件 - Android 问题

c# - ILogger 不需要配置?

nlog - 使用 NLog 自定义日期格式

c# - 在 RX 和 Signalr 中返回错误

asp.net-core - 如果我们仅更改数据注释的 Display 属性,是否还需要运行 Add-Migration

azure - 找不到要运行的项目。确保 D :\home\site\wwwroot 中存在项目

c# - ASP.NET 核心 : CORS headers only for certain static file types

asp.net-core - Asp.Net Core Web 应用程序中的 SeriLog 未正确注入(inject)依赖项