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