2011-08-20 56 views
2

第一次与log4net的玩,我遇到麻烦了。我跟着各种教程,但我一直无法得到它记录任何东西。让我告诉你我的代码,希望你能告诉我我做错了什么。log4net的不记录(可能不是初始化)

的app.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" 
      type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net>  
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="CurrentLog.txt"/> 
     <staticLogFileName value="true"/> 
     <appendToFile value="true"/> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd"/> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <acceptOnMatch value="true" /> 
     <levelMin value="DEBUG" /> 
     <levelMax value="FATAL" /> 
     </filter> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date{dd MMM yyy HH:mm:ss} %level %message. %newline %exception" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 

的AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

Presenter.cs

在班上名列前茅我有这样的:

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

然后我尝试在类以后使用日志变量:

bool isDebugEnabled = log.IsDebugEnabled; 
log.Debug("Failed to save", e); 

每当我检查isDebugEnabled变量,它是假的,因为都是其他isBlahEnabled,如果我检查日志变量。

我的怀疑是我没有正确连接我的app.config文件,因为这是我第一次尝试使用它。我通过在解决方案资源管理器中右键单击项目创建,添加一个新项目,选择应用程序配置文件并将其命名为app.config。

+1

运行应用程序的帐户是否有权创建并写入配置位置中的文件? – Oded

+0

它的确如此。看到我对@ Waldo的回答的回复,我现在可以在不改变任何权限的情况下进行日志记录工作了。 – Stu

回答

14

这一次为我的作品:

的app.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
     <appender name="Main" type="log4net.Appender.RollingFileAppender"> 
     <file value="${USERPROFILE}\My Documents\MyApp\Logs\Main.log" /> 
     <appendToFile value="false" /> 
     <maximumFileSize value="1GB" /> 
     <maxSizeRollBackups value="3" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date{ABSOLUTE} %-5level %-18logger %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="Main" /> 
     </root> 
    </log4net> 
</configuration> 

还可以肯定的app.config构建操作设置为并复制到输出目录设置为“复制如果更新“。您可以在文件属性中设置这些设置。

Program.cs的

public static ILog Log; 

static void Main(string[] args) 
{ 
    // Setup Logging 
    log4net.Config.XmlConfigurator.Configure(); 
    Log = LogManager.GetLogger("MyAwesomeApp"); 

    // ... 
} 
+2

我删除了AssemblyInfo.cs中的行,并将Main()中的第一行添加到App.xaml.cs的构造函数中(我正在开发WPF项目),现在一切正常。任何想法为什么它不工作? – Stu

+0

我不熟悉assemblyinfo方法。文档中描述了这些内容?我想它做的事情与实际配置稍有不同。 –

+0

这两个教程都使用AssemblyInfo.cs方法:http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx和http://mitch-wheat.blogspot.com/2007/04/log4net-net- logging-tool.html,但现在没有打扰,这是工作!非常感谢! – Stu

3

我想补充我的2美分:我有同样的问题,但我用在不同的log4net.config上述配置(所以我对所有的应用程序相同的配置),但我只是忘了在build'Copy new when'(或类似的措辞,德文版本)上设置文件属性。

2

我想补充我的2P的情况下,这可以帮助别人寻找一个解决这个问题:

在我来说,我用的是NServicebus.Logging包除了log4net的,而这个包中包含的类型与与Log4net中的名称完全相同,仅在命名空间中有所不同。

修复'使用'语句或完全限定类型名称解决了它,但很难发现问题。