日志文件没有创建?

时间:2010-01-07 23:43:36

标签: c# logging log4net log4net-configuration

我正在使用log4net并使用param name =“File”value =“C:\ Application.log”完全设置它。但是文件不是用C:创建的。我正在运行Windows 7,也许像权限这样的东西阻止了文件的创建。

以下是app.config:

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <configSections>  
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />  
  </configSections>`  

  <log4net>  
    <root>  
      <level value="DEBUG" />  
      <appender-ref ref="LogFileAppender" />  
    </root>  
    <appender name="LogFileAppender“ type=“log4net.Appender.RollingFileAppender" >  
      <param name="File" value="C:\Users\Mohit\Documents\Application.log" />  
      <param name="AppendToFile" value="true" />  
      <rollingStyle value="Size" />  
      <maxSizeRollBackups value="10" />  
      <maximumFileSize value="10MB" />  
      <staticLogFileName value="true" />  
      <layout type="log4net.Layout.PatternLayout">  
        <param name="ConversionPattern“ value=“%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />  
      </layout>  
    </appender>  
  </log4net>  
</configuration>

4 个答案:

答案 0 :(得分:7)

您必须提供真实的文件名。您在配置中定义的是文件夹名称。而不是:

<param name="File" value="C:\Users\Mohit\Documents" />

使用类似的东西:

<param name="File" value="C:\Users\Mohit\Documents\log.txt" />

此外,您可能需要提升应用程序的权限才能将日志写入root c:文件夹。 UAC不会让您写入根文件夹。

Andy说,你最好选择一些Windows用户文件夹子文件夹,如:

c:\Users\Mohit\AppData\Local\<MyApplication>

log4net有一些可用于定位特殊文件夹的预定义变量。关于SO有一些问题:

How to specify common application data folder for log4net?

C# how to specify the appData file path in the app.config file

答案 1 :(得分:1)

是的,请确保正在执行该应用程序的用户具有对c:。

的写入权限

更好的是,您可能不希望将应用程序日志写入根目录c:\目录。选择安装应用程序的位置或文档和设置(或Windows 7等效文件)下的某个位置可能会更好。

答案 2 :(得分:1)

我的问题是我的App.config文件中的部分顺序。我先是<startup>部分,然后是<configSections>部分。出于某种原因,我的Windows应用程序中没有出现错误,但它确实在控制台应用程序中出错。显然<configSections>必须是<configuration>

下的第一部分

所以,而不是:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

这样做:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>

答案 3 :(得分:0)

什么解决了我的问题基本上是what CTBrewski posted here (+1 btw!),但我的App.config有appSettings条目而不是configSections条目。

我在appSettings条目中移动了启动条目上方的log4net配置条目,然后将日志写入用户配置文件:

<configuration>
  <appSettings>
    <add key="log4net.Config" value="log4net.config" />
    <add key="log4net.Config.Watch" value="True" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings> 
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>
  ...
  ...

当然,我的appender看起来像这样:

  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="${LOCALAPPDATA}/Synclio/Logs/SynclioWin.log" />
    <appendToFile value="true" />
    <maximumFileSize value="5000KB" />
    <maxSizeRollBackups value="2" />

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level %thread %logger - %message%newline" />
    </layout>
  </appender>