在自定义目标中重用 NLogs FileTargets FilePathLayout 功能
Reuse NLogs FileTargets FilePathLayout functionality in a custom target
我想为 NLog(针对 LiteDB)创建自定义 FileTarget。我不能使用现有的,因为它缺少我需要的一些功能,而且据我所知,它与最新版本的 LiteDB 不兼容。在我的自定义目标中,我想使用 TempDir Layout Renderer。由于 NLog 已经有了 FilePathLayout class,我想我可以重用它但遗憾的是它被声明为内部的。
我错过了什么吗?还有其他使用方法吗?
我的设置:
- NLog: 4.7.2
- NLog.Web.AspNetCore: 4.9.2
- ASP.NET 核心 3.1
如果您正在编写自定义 NLog 目标,那么您可以这样做:
[Target("MyFirst")]
public sealed class MyFirstTarget: TargetWithLayout
{
public MyFirstTarget()
{
this.Directory = "${tempdir}";
}
public Layout Directory { get; set; }
protected override void Write(LogEventInfo logEvent)
{
string logMessage = RenderLogEvent(this.Layout, logEvent);
string directory = RenderLogEvent(this.Directory, logEvent);
WriteToDirectory(directory, logMessage);
}
private void WriteToDirectory(string directory, string message)
{
// TODO - write me
}
}
另请参阅:https://github.com/NLog/NLog/wiki/How-to-write-a-custom-target
我想为 NLog(针对 LiteDB)创建自定义 FileTarget。我不能使用现有的,因为它缺少我需要的一些功能,而且据我所知,它与最新版本的 LiteDB 不兼容。在我的自定义目标中,我想使用 TempDir Layout Renderer。由于 NLog 已经有了 FilePathLayout class,我想我可以重用它但遗憾的是它被声明为内部的。 我错过了什么吗?还有其他使用方法吗?
我的设置:
- NLog: 4.7.2
- NLog.Web.AspNetCore: 4.9.2
- ASP.NET 核心 3.1
如果您正在编写自定义 NLog 目标,那么您可以这样做:
[Target("MyFirst")]
public sealed class MyFirstTarget: TargetWithLayout
{
public MyFirstTarget()
{
this.Directory = "${tempdir}";
}
public Layout Directory { get; set; }
protected override void Write(LogEventInfo logEvent)
{
string logMessage = RenderLogEvent(this.Layout, logEvent);
string directory = RenderLogEvent(this.Directory, logEvent);
WriteToDirectory(directory, logMessage);
}
private void WriteToDirectory(string directory, string message)
{
// TODO - write me
}
}
另请参阅:https://github.com/NLog/NLog/wiki/How-to-write-a-custom-target