我已经搜索到了广泛的解决方案(包括相关的stackoverflow问题),但还没有找到解决我的问题的答案。我一直在工作项目中成功使用log4net,当我在Visual Studio中运行程序时,我得到了我的日志文件。如果我使用msi安装程序(wix)安装程序,那么我不会得到日志文件。我将首先列出我尝试过的东西,然后是我的代码的编辑版本。log4net在安装时没有创建日志文件
此外,我在任何地方说“appname”我实际上并没有放置appname,只是保持项目名称没有发布。
我将在$ {} USERPROFILE日志文件\应用程序数据\本地[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)]
却改变这被放置在安装目录和料仓修改后的配置文件名。
内的app.config的(请原谅任何可能的错别字,我的开发机airgapped,我不能复制粘贴代码):
<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#代码,我使用logger:
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
谢谢!那样做了,我指定文件的原因是由于我在集成Log4Net时最初做的故障排除。出于某种原因,我没有得到上述声明的日志文件。我可能错过了一些东西,就像现在它在VS中运行并在安装之后运行一样。在其他答案中没有找到的关键信息是log4net,如果您明确指定了assemblyinfo.cs中的配置文件,则需要将log4net元素作为根。 – Josh
彼得,我最近阅读了一篇关于用单个Execute方法(或任何名字)写一个'ICommand'接口的文章,再加上使用装饰器和策略作为实现AOP的手段,但对于我来说,再次找到它。你能为我提供一个链接吗? – ErikE