【问题标题】:How to specify log file path using folder locations in Windows with log4net xml configurator?如何使用 log4net xml 配置器在 Windows 中使用文件夹位置指定日志文件路径?
【发布时间】:2011-03-21 06:21:28
【问题描述】:

在我的 app.config 我放

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="%programdata%/log-file.txt"/>

但它没有用。有什么想法吗?

【问题讨论】:

  • 是的,它没有扩展 %programdata%。

标签: .net windows logging log4net special-folders


【解决方案1】:

扩展环境变量的 log4net 语法是 "${Variable}" 例如

<file value="${LOCALAPPDATA}\GojiSoft\GojiLog\log.txt" />

【讨论】:

  • 这个语法是 log4net 特有的吗?它可以在其他设置中使用吗?
  • @Jader 这是专门在log4net中实现的。
  • 虽然您的示例运行良好,但 ${PROGRAMDATA} 不起作用。但我认为这是某种权限问题。
  • @Jader 进程的所有者需要有写入指定位置的权限。
  • 你有链接到讨论这个 log4net 语法的参考页面吗?
【解决方案2】:

在这里恢复一个旧线程,但我遇到了同样的问题并想分享一下。

${PROGRAMDATA},正如另一个答案的评论线程中所讨论的那样,对我不起作用(与 OP 相同)。但是,我在某处看到了关于它区分大小写的评论。试过 ${ProgramData} ,果然,它工作得很好。

【讨论】:

  • 有同样的经历。我必须使用全部大写的 LOCALAPPDATA 才能工作。 LocalAppData 失败。
  • 嗯...一定是版本不同——不管是 Windows、编译器、log4net 本身,我都不确定。
  • 注意“ProgramData”是指每个用户共享同一个日志。
  • 我尝试了各种不同情况的路径(localappdata、appdata、programdata),但都没有。它总是最终创建像“$ {ProgramData}”这样的文件夹。在 bin 文件夹中。好烦
【解决方案3】:

使用 ${APPDATA} 代替 ${LOCALAPPDATA}

【讨论】:

    【解决方案4】:

    我们发现当使用带有 DotNetCore 的 Log4Net 和 Microsoft.Extensions.Logging.Log4NetProvider 扩展方法时环境变量没有被传递。这是因为 log4net 配置器是通过将 log4net 配置文件解析为 XML 来配置的,然后将其传递给绕过环境变量替换的 log4net 配置器。但是,您可以通过执行以下操作来覆盖属性:

    hostBuilder.ConfigureLogging(logBuilder =>
                {
                    var logsPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
                    logBuilder.AddLog4Net(new Log4NetProviderOptions
                        {
                            PropertyOverrides = new List<NodeInfo>
                            {
                                new NodeInfo
                                {
                                    XPath = "//appender[@name='rollingFile']//file",
                                    Attributes = new Dictionary<string, string>
                                    {
                                        {
                                            "value", Path.Combine(logsPath, "Application.log") 
                                        }
                                    }
                                }
                            }
                        });
                });
    
    <log4net>
      <root>
        <level value="INFO" />
        <appender-ref ref="console" />
        <appender-ref ref="rollingFile" />
      </root>
      <appender name="console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %level - %message%newline" />
        </layout>
      </appender>
      <appender name="rollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="Application.log" /> <!--This is overidden at run time. Based on the appender name: rollingFile.-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="5" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
        </layout>
      </appender>
    </log4net>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      相关资源
      最近更新 更多