log4net 在安装时不创建日志文件
log4net not creating log file upon installation
我广泛搜索了我的解决方案(包括相关的 Whosebug 问题),但尚未找到解决我的问题的答案。我一直在一个工作项目中成功使用 log4net,当我 运行 visual studio 中的程序时,我得到了我的日志文件。如果我使用 msi 安装程序 (wix) 安装程序,那么我不会得到日志文件。我将首先列出我尝试过的事情,然后是我的代码的编辑版本。
此外,我在任何地方说 "appname" 我实际上并没有输入应用程序名称,只是将项目名称保留在 post.
之外
我将日志文件放在 ${USERPROFILE}\AppData\Local[appname] 目录中,权限不是问题。
由于安装版本中存在的配置文件是 appname.exe.config 而不是 app.config,我将 Assemblyinfo.cs 汇编语句更改为 appname.exe.config.然而,这并没有解决我的问题,它仍然只在 运行 宁到 visual studio 时有效,已安装的版本没有。
我修改了product.wxs,将log4net.dll和log4net.xml传送到安装目录。 (忘了这样做,应用程序无法启动所以回来并添加了它)仍然没有变化。
我们在一个使用 log4net 的解决方案中有 5 个项目。所有 assemblyinfo.cs 文件都具有以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "appname.exe.config", Watch = true)]
我正在使用 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]
但将其更改为修改后的配置文件名,该文件名位于安装目录和 bin 中。
app.config内部(请原谅任何可能的拼写错误,我的开发机器是气隙的,我无法复制粘贴代码):
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="MyAppender"/>
</root>
<appender name="MyAppender" type="log4net.Appender.FileAppender">
<file value="${USERPROFILE}\AppData\Local\appname\appname.log"/>
<appendToFile value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%newline"/>
</layout>
</appender>
</log4net>
</configuration>
在我使用记录器的 C# 代码中:
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
如果您的配置在 app.config 中,您可以只使用:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
当您指定文件时,log4net 期望 log4net 元素作为 xml 根元素。这对你的 app.config.
来说是不正确的
@erike 我不确定这是我的。所以我没有 link 给你。
我广泛搜索了我的解决方案(包括相关的 Whosebug 问题),但尚未找到解决我的问题的答案。我一直在一个工作项目中成功使用 log4net,当我 运行 visual studio 中的程序时,我得到了我的日志文件。如果我使用 msi 安装程序 (wix) 安装程序,那么我不会得到日志文件。我将首先列出我尝试过的事情,然后是我的代码的编辑版本。
此外,我在任何地方说 "appname" 我实际上并没有输入应用程序名称,只是将项目名称保留在 post.
之外我将日志文件放在 ${USERPROFILE}\AppData\Local[appname] 目录中,权限不是问题。
由于安装版本中存在的配置文件是 appname.exe.config 而不是 app.config,我将 Assemblyinfo.cs 汇编语句更改为 appname.exe.config.然而,这并没有解决我的问题,它仍然只在 运行 宁到 visual studio 时有效,已安装的版本没有。
我修改了product.wxs,将log4net.dll和log4net.xml传送到安装目录。 (忘了这样做,应用程序无法启动所以回来并添加了它)仍然没有变化。
我们在一个使用 log4net 的解决方案中有 5 个项目。所有 assemblyinfo.cs 文件都具有以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "appname.exe.config", Watch = true)]
我正在使用 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]
但将其更改为修改后的配置文件名,该文件名位于安装目录和 bin 中。
app.config内部(请原谅任何可能的拼写错误,我的开发机器是气隙的,我无法复制粘贴代码):
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="MyAppender"/>
</root>
<appender name="MyAppender" type="log4net.Appender.FileAppender">
<file value="${USERPROFILE}\AppData\Local\appname\appname.log"/>
<appendToFile value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%newline"/>
</layout>
</appender>
</log4net>
</configuration>
在我使用记录器的 C# 代码中:
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
如果您的配置在 app.config 中,您可以只使用:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
当您指定文件时,log4net 期望 log4net 元素作为 xml 根元素。这对你的 app.config.
来说是不正确的@erike 我不确定这是我的。所以我没有 link 给你。