2010-01-07 348 views
5

我正在使用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> 

回答

7

您必须提供一个真实的文件名。您在配置中定义的是文件夹名称。相反的:

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

使用类似:

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

此外,你可能需要为你的应用程序日志写入根℃升温权限:文件夹。 UAC不会让你写入根文件夹。

就像安迪说,你会是更好的选择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

呀,确保在执行应用程序的用户有写的权限,C :.

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

+0

还要确保在记录器上指定了appender。很容易错过。如果您在VS下的调试模式下运行应用程序,则可以使用跟踪appender,并且日志输出将显示在“输出”窗口中,如果Log4Net本身说了什么,则非常有用。 – Skurmedel 2010-01-07 23:49:16

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> 
0

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

我感动与启动项以上我log4net的配置项的appSettings项,然后将日志写入到用户配置文件:

<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> 
+0

不错的编辑@Philipp,我不得不记得使用语言助手,因为我喜欢语法着色。 – jmort253 2013-10-22 20:08:43