log4net 在安装时不创建日志文件

log4net not creating log file upon installation

我广泛搜索了我的解决方案(包括相关的 Whosebug 问题),但尚未找到解决我的问题的答案。我一直在一个工作项目中成功使用 log4net,当我 运行 visual studio 中的程序时,我得到了我的日志文件。如果我使用 msi 安装程序 (wix) 安装程序,那么我不会得到日志文件。我将首先列出我尝试过的事情,然后是我的代码的编辑版本。

此外,我在任何地方说 "appname" 我实际上并没有输入应用程序名称,只是将项目名称保留在 post.

之外
  1. 我将日志文件放在 ${USERPROFILE}\AppData\Local[appname] 目录中,权限不是问题。

  2. 由于安装版本中存在的配置文件是 appname.exe.config 而不是 app.config,我将 Assemblyinfo.cs 汇编语句更改为 appname.exe.config.然而,这并没有解决我的问题,它仍然只在 运行 宁到 visual studio 时有效,已安装的版本没有。

  3. 我修改了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 给你。