【问题标题】:Log4net custom config files deployment with Azure Serivce Fabric使用 Azure Serivce Fabric 部署 Log4net 自定义配置文件
【发布时间】:2017-07-29 05:28:15
【问题描述】:

我想从 xml 文件配置 log4net。我将此文件放在服务的根文件夹中。属性 Copy to Output Directory 设置为 Copy Always 并且工作正常 — 正在复制文件。

当我尝试使用log4net.Config.XmlConfigurator.ConfigureAndWatch 加载此文件时,问题就开始了——它不在工作目录中,而是在另一个包含代码的目录中。

我不想将 log4net 的配置放入 app.config。它现在不起作用,我会花很多时间来解决这个问题。

有没有办法向特定服务添加一些元数据(在文件中)然后访问它们?

一般有没有办法做到这一点并将文件不在根目录中?例如,如果我想访问一些不能放在 Settings.xml 中的二进制数据,我该如何实现呢?

更新

看起来复制文件唯一需要做的就是将它们的属性设置为Copy Always。所以,我真正的问题是我有 C:\SfDevCluster\[..]\work 作为工作目录,而不是包含实际二进制文件的目录。

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    您可以为此使用自定义配置包或数据包。 使用ServiceContext 对象访问文件。

    更多信息here

    【讨论】:

    • Vaclav Turecek wrote 表示在最新版本的 SF ServiceInitializationParameters 被替换为服务的 Context。这意味着在创建服务之前,我不能使用它在主机进程中实例化记录器。这就是为什么这不是我的解决方案。还是我错过了什么?
    • context是Service的构造函数参数,如果你想你可以用它来初始化Program.Main中的logger,在创建Service实例的Func中。
    • 好的,我明白了。我需要获取Settings.xml,然后获取它的路径,然后添加我的自定义配置文件的名称。谢谢,它有效。尽管如此,如果我想在实例化服务之前记录一些东西,我无法获得任何配置,因为无法访问Context
    【解决方案2】:

    您也可以使用 AppDomain.CurrentDomain.BaseDirectory 来获取二进制文件所在的目录,该目录也是 log4net.config 文件所在的目录。

    如果您使用的是 .net 核心,这对您没有帮助,因为它不再具有应用程序域,但是您可以使用 Assembly.GetEntryAssembly() 之类的东西并从那里获取它的路径。您需要查找确切的语法。

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2016-08-25
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多