15

在我的 app.config 我把

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

但它没有用。有任何想法吗?

4

4 回答 4

26

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

<file value="${LOCALAPPDATA}\GojiSoft\GojiLog\log.txt" />
于 2010-07-26T19:05:32.530 回答
21

在这里复活一个旧线程,但我遇到了同样的问题并认为我会分享。

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

于 2013-10-30T16:05:19.743 回答
2

使用 ${APPDATA} 而不是 ${LOCALAPPDATA}

于 2018-11-25T13:49:04.610 回答
0

我们发现当使用带有 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>
于 2020-06-04T13:28:52.510 回答