2012-03-21 185 views
26

将日志从log4net写入文件时遇到一些麻烦。我似乎按照手册中的描述完成了所有操作,但这不起作用。这里是我的logging.config文件:将日志写入文件

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

请与实际工作的配置文件的例子帮助。

+3

我敢打赌那几个在互联网上的例子 – 2012-03-21 13:10:58

+1

您是否配置Xml设置... http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html – Lloyd 2012-03-21 13:14:37

回答

34

你似乎并不有一个<root>元素引用您的appender:

<?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="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="INFO" /> 
     <appender-ref ref="RollingFileAppender" /> 
     </root> 
    </log4net> 
</configuration> 
+3

谢谢,这是一个观点。另外我发现你可以把将所有日志重定向到文件。 – 2012-03-22 08:17:05

17

第一次启动应用程序时,您是否调用过配置方法?

log4net.Config.XmlConfigurator.Configure(); 

如果是。你应该很好。检查您正在编写的磁盘上的文件权限。

如果你想让你可以启用log4net内部调试功能来弄清楚什么是错误的。

http://logging.apache.org/log4net/release/faq.html#troubleshooting

+0

您也可以启用log4net内部调试,详细信息如这里:http://logging.apache.org/log4net/release/faq.html#troubleshooting – paul 2012-03-21 13:15:55

+0

对于一个.NET Web应用程序,这行只需要调用一次?即在Global.asax文件的Application_Start()中?或者在每个用户会话开始,即Session_Start()? – Seany84 2012-03-21 13:17:10

+0

@paul:添加到我的答案。谢谢Paul – Shyju 2012-03-21 13:18:41

6

有两件事情可以做:

之一,如果你愿意,你App.config文件,将配置自动登录到使用一个单独的配置文件中,加入以下。

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Config" value="log4.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 
     <add key="log4net.Internal.Debug" value="False"/> 
    </appSettings> 
</configuration> 

否则,您需要在应用程序启动时启动日志记录。

//Initiate logging based on web.config file 
log4net.Config.XmlConfigurator.Configure(); 

// Create a logger for use in this class 
log4net.ILog log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
69

这是一个完整的一步一步的指导,以增加log4net的到您的项目时,Visual Studio 2012下和.NET 4.5。

  1. 将新的C#控制台应用程序添加到您的解决方案。

  2. 选择Tools >> Library Package Manager >> Manage NuGet Packages For Solution并搜索log4net。安装它,然后选择要添加log4net引用的项目。 enter image description here

  3. Program.cs编辑:

using System; 
namespace Log4Net 
{  
    class Program 
    { 
     private static readonly log4net.ILog log = log4net.LogManager.GetLogger 
       (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n"); 
      log.Info("Info logging"); 
      try 
      { 
       throw new Exception("Exception!"); 
      } 
      catch (Exception e) 
      { 
       log.Error("This is my error", e); 
      } 
      Console.WriteLine("[any key to exit]"); 
      Console.ReadKey(); 
      } 
     } 
    } 
} 
  • 添加log4.config,右击并选择Properties然后选择Copy to Output Directory - Copy If Newer
  • <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
        </startup> 
        <appSettings> 
         <add key="log4net.Config" value="log4.config"/> 
         <add key="log4net.Config.Watch" value="True"/> 
         <add key="log4net.Internal.Debug" value="False"/> 
        </appSettings> 
    </configuration> 
    
  • 运行程序和观察:

  • <?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="log.txt" /> 
         <appendToFile value="true" /> 
         <rollingStyle value="Size" /> 
         <maxSizeRollBackups value="10" /> 
         <maximumFileSize value="250KB" /> 
         <staticLogFileName value="true" /> 
         <layout type="log4net.Layout.PatternLayout"> 
         <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
         </layout> 
        </appender> 
        <root> 
         <level value="ALL" /> 
         <appender-ref ref="RollingFileAppender" /> 
        </root> 
        </log4net> 
    </configuration> 
    
  • 编辑App.Config,使其与以下相匹配在输出中创建的文件log.txt\bin\Debug\目录:

    2013-08-10 11:54:26,798 [10] INFO Log4Net.Program [(null)] - Info logging 
    2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error 
    System.Exception: Exception! 
        at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14 
    
  • 在未来,如果你想添加log4net到另一个项目,选择Tools >> Library Package Manager >> Manage NuGet Packages For Solution选择log4net并单击Manage然后勾选要添加log4net的项目。 enter image description here

  • +0

    只需注意configSections:“如果此元素位于配置文件中,它必须是元素的第一个子元素。” https://msdn.microsoft.com/en-us/library/aa903350(v=vs.71).aspx – unicorn2 2017-06-27 07:01:03

    +0

    你能详细说明一下App.config设置的播放吗? – jxramos 2017-12-12 19:32:54

    +0

    @jxramos app.config中的设置控制与日志记录有关的所有事情,包括是否写入文件,每行是什么格式,是否写入控制台等等。查看log4net文档可能更容易选项。 – Contango 2017-12-14 16:42:48

    2

    太棒了。这些问题的答案是正确的......除了他们没有为我

    搜索网工作,终于发现了我失踪以下行Assembly.cs:

    [assembly: log4net.Config.XmlConfigurator]