如何在 app.config 处获取 log4net 标记的值?

How can i get a value of log4net tag at app.config?

我正在制作一个程序,使用 log4net 进行记录。我在项目中添加了库,根据需要配置了 app.config 文件并且效果很好,但是我如何从 log4net 标签中获取信息以便在我的代码中使用它?例如,这是我的 app.config 文件的一部分:

<log4net>
  <appender name="LogMainDebug" type="log4net.Appender.FileAppender">
    <param name="File" value="D:\Folder\log-mainDebug.txt" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="[%date{dd-MM-yyyy HH:mm:ss}] [%-5p] - [%m]%n" />
    </layout>
  </appender>  

<root>
  <appender-ref ref="LogMain" />
  <appender-ref ref="LogMainDebug"/>
</root>     

那么,我如何从中获取路径值 "D:\Folder\log-mainDebug.txt" 并在我的代码中使用它?

您可以通过在 app.configlog4net 配置部分提供配置文件路径 configSource 来实现此目的,如下所示。

<log4net configSource="config\log-mainDebug.txt" />

这里的限制是log4net不接受绝对路径为configSource。您必须提供 log-mainDebug.txt 的相对位置,如上述代码段所示。

相对路径应相对于应用程序所在的位置 运行。因此,在上述情况下,您需要确保该文件夹中的文件夹 config 和文件 log-mainDebug.txt 在与应用程序相同的位置可用。

为此,您可以为项目配置 post-build 命令,这样每当您构建项目时,文件 log-mainDebug.txt 都会被复制到 bin 文件夹或任何目标构建文件夹。

一个这样的 post 构建事件命令如下。

xcopy /S /I /Y /R $(ProjectDir)Config  $(ProjectDir)$(OutDir)Config

此命令会将位于项目文件夹外的config文件夹复制到项目的构建文件夹中。您需要在项目属性 windows 中将此命令配置为 post 构建事件命令,以便每次构建项目时它都会执行。

这应该可以帮助您解决您想要实现的目标。

您想要的值是 FileAppender 的 属性。您只需要从 appender 的当前实例中获取它:

var appenders = LogManager.GetRepository().GetAppenders();
var filePath = appenders.OfType<FileAppender>().Single().File;