我想log4net写记录文件(使用RollingFileAppender)一个子文件夹共同应用程序的数据文件夹(例如C:\Documents 并且设置\所有用户应用数据\公司\产品\日志)。
然而,在赢得XP,没有环境可变指定这个文件夹。我们 %ALLUSERSPROFILE%, 我们有 %APPDATA%, 但是,没有什么样的 %ALLUSERSAPPDATA%.
通过程序,我可以使用 Environment.SpecialFolder.CommonApplicationData, 但是我需要把它放在log4net配置,是这样的:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
   <file value="%ALLUSERSAPPDATA%\Company\Product\Logs\error.log" />
</appender>

好吧,我们可以限定,这在我们的设置,但是也许有人来了一个更好的主意吗?

有帮助吗?

解决方案

此公告在log4net的邮件列表说明如何定义自己的路径替换变量。

其他提示

我们只需要使用这样的:

<param name="File" value="${ALLUSERSPROFILE}/Company/Product/Logs/error.log"/>

它的伟大工程。


这条线可以简单地插入到当前附加器配置:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
   <param name="File" value="${ALLUSERSPROFILE}/Company/Product/Logs/error.log"/>
</appender>

这里的全代码从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));
    }
}

然后设立了该文件的参数的FileAppender如下:

<file type="log4net.Util.PatternString">
    <converter>
      <name value="folder" />
      <type value="MyAppName.SpecialFolderPatternConverter,MyAppName" />
    </converter>
    <conversionPattern value="%folder{CommonApplicationData}\\SomeOtherFolder\\log.txt" />
</file>

基本上 %folder 告诉它来看看转换器叫 folder 这点到SpecialFolderPatternConverter类。然后,它呼吁 Convert 在这一类中,通过在CommonApplicationData(或者)枚举的价值。

显然在下一个版本的log4net(1.2.11)将有一个更简单的方法,作为描述 在这里,.

完整和工作的解决方案 - 内容我Log4net.config文件。在log4net的实际版本,没有必要再编写自己的模式转换

<?xml version="1.0"?>
<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="LogFileAppender" />
  </root>
  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file type="log4net.Util.PatternString" value="%envFolderPath{CommonApplicationData}\\MyProject\\Logs\\log.txt" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100MB" />
    <layout type="log4net.Layout.PatternLayout">
      <ConversionPattern type="log4net.Util.PatternString" value="%%-5p %%d{yyyy-MM-dd HH:mm:ss} - %%m%%n" />
    </layout>
  </appender>
</log4net>

在当前的log4net版本(2.0.8.0),你可以简单地使用

<file value="${ProgramData}\myFolder\LogFiles\" />C:\ProgramData

${LocalAppData}C:\Users\user\AppData\Local\

${AppData}C:\Users\user\AppData\Roaming\

现在(2018年二月)按照log4net的版本2.0.8.0。

您可以使用无需任何转换器,以获得环境变量如下:

<file type="log4net.Util.PatternString" value="%envFolderPath{CommonApplicationData}\\mylogfile.txt" />

参见: log4net.Util.PatternString 类文档以获取更多的信息。

scroll top