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

时间:2017-02-28 14:28:41

标签: c# log4net log4net-configuration

我正在制作一个程序,使用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”并在我的代码中使用它?

2 个答案:

答案 0 :(得分:1)

您可以通过在configSource的{​​{1}}配置部分中将配置文件路径设置为log4net来实现此目的。

app.config

此处的限制是<log4net configSource="config\log-mainDebug.txt" /> 不接受绝对路径log4net。您必须提供configSource的相对位置,如上面的代码段所示。

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

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

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

log-mainDebug.txt

此命令会将位于项目文件夹外部的xcopy /S /I /Y /R $(ProjectDir)Config $(ProjectDir)$(OutDir)Config 文件夹复制到项目的build文件夹中。您需要在项目属性窗口中将此命令配置为post build event命令,以便每次构建项目时都会执行该命令。

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

答案 1 :(得分:1)

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

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