部署时Log4Net不会记录

时间:2013-09-09 09:48:10

标签: c# wpf deployment log4net

我正在使用log4net来记录我的应用程序(这是一个WPF应用程序)。 日志记录在调试模式下运行良好,但它不适用于我部署的版本。 该应用程序安装在C:\ Program Files(x86)\ MyApp(我使用InnoSetup创建安装程序)。 在调试模式下,日志文件夹创建良好,日志文件也是如此。 在已部署的版本中,不显示任何内容,不会创建日志文件夹。

这是我的log4net配置:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    </configSections>    
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log\main.log" />
      <encoding value="utf-8" />
      <appendToFile value="true" />
      <maximumFileSize value="1000KB" />
      <maxSizeRollBackups value="0" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger: %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="FileAppender" />
    </root>
  </log4net>
</configuration>

这是我在我的类中编写日志的方法(这个例子来自App.xaml.cs):

protected static readonly ILog log = LogManager.GetLogger(typeof(App));

static App()
{
    log4net.Config.XmlConfigurator.Configure();  
}

private void Application_Startup(object sender, StartupEventArgs e)
{
    log.Info("This is an info log");
}

我尝试将级别值更改为ALL,但没有任何更改。 我认为它可能是一个设置参数,因为它在调试模式下运行良好(日志文件在文件夹“x86 \ Debug \ log \”中正确创建。

我做了一些研究,但我一无所获。

2 个答案:

答案 0 :(得分:4)

听起来像权限问题:目录权限(和UAC)会阻止您的应用写入C:\ Program Files(x86)以下的任何内容,除非您以管理员身份运行它。将日志路径更改为其他位置,例如${LOCALAPPDATA}\MyApp\MyApp.log

答案 1 :(得分:1)

您可以右键单击“C:\ Program Files(x86)\ MyApp”文件夹,属性_&gt;证券并将正在运行应用程序的用户添加到Write权限? 或者,如果您右键单击您的应用程序并“以管理员身份运行”? 它有所不同吗?