gpt4 book ai didi

configuration - 使用 NLog 登录到可用驱动器?

转载 作者:行者123 更新时间:2023-12-02 00:15:33 25 4
gpt4 key购买 nike

如果 d: 存在,是否可以将 NLog 配置为将日志写入 d:\logs,如果 d: 不存在则写入 c:\logs 代替?

最佳答案

我认为您可以结合自定义 LayoutRenderer 和 XML 配置来实现。在 XML 配置中,您可以使用 LayoutRenderers 来指定文件名。例如:

<target name="logfile" xsi:type="File" fileName="${basedir}/${shortdate}.log" />

FileTarget 对象将根据 ${basedir} 的值创建一个文件。和 ${shortdate}布局渲染器。

您可以轻松编写自定义 LayoutRenderer,也许将其称为“FindAvailableDrive”,并像这样配置它:
<target name="logfile" xsi:type="File" fileName="${FindAvailableDrive}/logs/${shortdate}.log" />

FindAvailableDrive LayoutRender 可以以驱动器号开头,例如“C:”​​,然后更改直到找到有效驱动器。为了更进一步,FindAvailableDrive 可以采用一个或多个参数来帮助定义如何搜索有效驱动器:
<target name="logfile" xsi:type="File" fileName="${FindAvailableDrive:Drives=DC}/logs/${shortdate}.log" />

在这种情况下,FindAvailableDrive 将检查驱动器 D,然后检查驱动器 C。

这是一个示例(未经测试),说明如何编写此类 LayoutRenderer(请注意,这是基于我针对 NLog 1.0 编写的现有 LayoutRender,因此对于 NLog 2.0,其中一些可能不是必需的(或有效的)):
  [LayoutRenderer("FindAvailableDrive")]
class FindAvailableDriveLayoutRenderer : LayoutRenderer
{
private string validDrive;

[DefaultParameter]
public string DriveCandidates { get; set; }

protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(FindValidDrive());
}

protected override int GetEstimatedBufferSize(LogEventInfo logEvent)
{
return 2;
}

private string FindValidDrive()
{
if (!String.IsNullOrEmpty(validDrive)) return validDrive;

if (String.IsNullOrEmpty(DriveCandidates))
{
if (Directory.Exists("C:"))
validDrive = "C:";
else
if (Directory.Exists("D:"))
validDrive = "D:";
//And so on if you want to continue to check for valid drives.
return validDrive;
}

validDrive = DriveCandidates.Select(c => string.Format("{0}:", c).Where(d => Directory.Exists(d)).FirstOrDefault();

//What to do if no drives exists?

return validDrive;
}
}

你可以看到我对另一个问题的回答 here有关如何在 NLog 中编写和使用自定义 LayoutRenderer 的更多信息。

关于configuration - 使用 NLog 登录到可用驱动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13393180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com