bsh*_*ett 7 log4net environment-variables
我有一个使用log4net进行日志记录的内部应用程序.我想要生成日志%LOCALAPPDATA%\Vendor\App\application.log.不幸的是,log4net正在创建日志文件%APPDATA%.这不是一个大问题,因为我们真的不在这里使用漫游配置文件,但我不喜欢在我的代码中留下一点特质,如果我可以避免它.
有关如何将文件写入我指定的位置而不用编程配置log4net并使用pinvoke获取XP路径的任何想法?
如果有任何帮助,这是我的配置文件的appender部分:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="${LOCALAPPDATA}\Vendor\App\application.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger%newline%message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,则意味着您的环境变量是错误的.
Log4net没有任何特殊功能来处理appdata或localappdata.它所做的就是调用System.Environment.GetEnvironmentVariables()来返回一个哈希表,并根据返回的值执行替换.
小智 6
很晚才来这里参加聚会,但是我碰到了这个,才找到了答案。
似乎可以使用log4net.Util.PatternString将环境变量插入文件路径。因此,OP的示例变为:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%env{LOCALAPPDATA}\Vendor\App\application.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger%newline%message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
将type =“ log4net.Util.PatternString”添加到文件元素,然后指定%env模式说明符,后跟大括号中的环境变量名称。
希望这对某人有帮助!