在我的 app.config 我把
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="%programdata%/log-file.txt"/>
但它没有用。有任何想法吗?
在我的 app.config 我把
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="%programdata%/log-file.txt"/>
但它没有用。有任何想法吗?
扩展环境变量的 log4net 语法是 "${Variable}" 例如
<file value="${LOCALAPPDATA}\GojiSoft\GojiLog\log.txt" />
在这里复活一个旧线程,但我遇到了同样的问题并认为我会分享。
${PROGRAMDATA},正如另一个答案的评论线程中所讨论的那样,对我不起作用(与 OP 相同)。但是,我在某处看到了关于它区分大小写的评论。试过 ${ProgramData} ,果然,它工作得很好。
使用 ${APPDATA} 而不是 ${LOCALAPPDATA}
我们发现当使用带有 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>