如何在 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.config
的 log4net
配置部分提供配置文件路径 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;
我正在制作一个程序,使用 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.config
的 log4net
配置部分提供配置文件路径 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;