use*_*474 35 logging log4net environment-variables
我希望log4net将日志文件(使用RollingFileAppender)写入公共应用程序数据文件夹的子文件夹(例如C:\ Documents and Settings\All Users\Application Data\Company\Product\Logs).
但是,在Win XP上,没有指定此文件夹的环境变量.我们有%ALLUSERSPROFILE%,%APPDATA%但没有什么比这更好的了%ALLUSERSAPPDATA%.
以编程方式,我可以使用Environment.SpecialFolder.CommonApplicationData,但我需要将它放在log4net配置中,如下所示:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="%ALLUSERSAPPDATA%\Company\Product\Logs\error.log" />
</appender>
Run Code Online (Sandbox Code Playgroud)
好的,我们可以在我们的设置中定义这个,但也许有人提出了一个更好的主意?
pdu*_*can 33
我们只是用这个:
<param name="File" value="${ALLUSERSPROFILE}/Company/Product/Logs/error.log"/>
Run Code Online (Sandbox Code Playgroud)
它很棒.
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="${ALLUSERSPROFILE}/Company/Product/Logs/error.log"/>
</appender>
Run Code Online (Sandbox Code Playgroud)
cod*_*ike 12
这是来自log4net邮件列表的完整代码,该邮件列表与pilif相关联:
基本上,该方法是为log4net配置文件实现自定义模式转换器.
首先将此类添加到您的项目中:
public class SpecialFolderPatternConverter : log4net.Util.PatternConverter
{
override protected void Convert(System.IO.TextWriter writer, object state)
{
Environment.SpecialFolder specialFolder = (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), base.Option, true);
writer.Write(Environment.GetFolderPath(specialFolder));
}
}
Run Code Online (Sandbox Code Playgroud)
然后设置FileAppender的File参数,如下所示:
<file type="log4net.Util.PatternString">
<converter>
<name value="folder" />
<type value="MyAppName.SpecialFolderPatternConverter,MyAppName" />
</converter>
<conversionPattern value="%folder{CommonApplicationData}\\SomeOtherFolder\\log.txt" />
</file>
Run Code Online (Sandbox Code Playgroud)
基本上它%folder告诉它看看转换器folder,它将它指向SpecialFolderPatternConverter类.然后它调用Convert该类,传入CommonApplicationData(或其他)枚举值.
显然,在log4net的(1.2.11)的下一个版本将会有一个更简单的方法,描述在这里.