【问题标题】:Setup Nlog unc path by project configuration file通过项目配置文件设置 Nlog unc 路径
【发布时间】:2015-05-14 00:27:03
【问题描述】:

假设我将 NLog 目标定义为:

<variable name="day" value="${date:format=dddd}"/>
  <targets>
    <target name="file" xsi:type="File" layout="${verbose}" fileName="${basedir}/${day}.log" />
 </targets>

但是我真的想将文件位置放在应用程序配置文件或其他 xml 文件中。我不知道如何在 C# 代码中而不是在 NLog 配置文件中设置 unc 路径。

编辑:

假设应用程序将分布在美国不同地点的 100 个客户端中。每个客户端都希望拥有自己的日志文件位置。应用程序有自己的 app.config 或相应的 xml 文件来存储其位置。所以似乎没有办法对 NLog 配置文件中的位置进行硬编码。

【问题讨论】:

  • 不确定“硬编码位置”是什么意思。您希望它们硬编码,还是以编程方式设置它们?
  • @Noctis,我的意思是 {basedir} 被引用到应用程序文件夹 (github.com/nlog/NLog/wiki/File-target)。但在我的情况下,客户会定制自己的。例如,客户端 1 会选择“\\1111\log.txt”,但客户端 2 会选择“\\2222\log.txt”。这些信息是保存 xml 文件或应用程序配置。是的,我想以编程方式设置它们。

标签: c# nlog


【解决方案1】:

所以我需要对连接字符串和数据库目标做类似的事情(this is my original question and self answer,可能会增加一些额外的帮助)。对该解决方案稍作修改,您可以尝试类似

注意事项:
1.这还没有经过测试,但应该让你接近。
2.我使用的是Castle Windsor,所以这就是我设置工厂类的原因,您可能不需要所有这些,只需要foreach

public class OwnNLogFactory : NLogFactory
{
    public OwnNLogFactory(string filePath)
    {
        foreach (var dbTarget in LogManager.Configuration.AllTargets.OfType<FileTarget>().Select(aTarget => aTarget))
        {
            dbTarget.FileName = filePath;
        }
    }
}

希望这会有所帮助,我意识到这是不久前被问到的,但偶然发现了这个,正在寻找其他东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多