2012-03-21 12 views
26

Tôi gặp một số sự cố khi viết nhật ký từ log4net vào tệp. Tôi dường như làm tất cả như mô tả trong hướng dẫn sử dụng, nhưng điều đó không hoạt động. Đây là tệp logging.config của tôi:Viết nhật ký vào tập tin

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

Vui lòng trợ giúp với ví dụ về tệp cấu hình thực sự hoạt động.

+3

tôi muốn đặt cược rằng một số ví dụ trên internet –

+1

Bạn có định cấu hình cài đặt Xml không ... http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html – Lloyd

Trả lời

34

Bạn dường như không có một yếu tố <root> tham chiếu appender của bạn:

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

Cảm ơn, đó là một điểm. Ngoài ra tôi đã phát hiện ra rằng bạn có thể đặt để chuyển hướng tất cả các bản ghi vào tệp. –

17

Bạn có gọi phương thức cấu hình khi ứng dụng bắt đầu lần đầu tiên không?

log4net.Config.XmlConfigurator.Configure(); 

Nếu có. Bạn nên tốt. Kiểm tra quyền truy cập tập tin trên đĩa bạn đang viết.

Nếu bạn muốn, bạn có thể bật gỡ lỗi nội bộ log4net cũng để tìm ra điều gì sai.

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

+0

bạn cũng có thể bật gỡ lỗi nội bộ log4net, như được mô tả chi tiết tại đây: http://logging.apache.org/log4net/release/faq.html#troubleshooting – paul

+0

Đối với ứng dụng web .NET, dòng này chỉ cần được gọi một lần? tức là trong Application_Start() của tệp Global.asax? Hoặc trên mỗi phiên người dùng bắt đầu, tức là Session_Start()? – Seany84

+0

@paul: Đã thêm vào câu trả lời của tôi. Cảm ơn Paul – Shyju

6

Có hai điều mà bạn có thể làm:

One, nếu bạn muốn sử dụng một tập tin cấu hình riêng biệt, bằng cách thêm những điều sau đây để bạn app.config tập tin nó sẽ cấu hình đăng nhập tự động.

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

Nếu không, bạn cần bắt đầu đăng nhập khi bắt đầu ứng dụng.

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

Đây là một hướng dẫn từng bước hoàn chỉnh để thêm Log4Net để dự án của bạn, dưới Visual Studio 2012 và .NET 4.5.

  1. Thêm ứng dụng giao diện điều khiển C# mới vào giải pháp của bạn.

  2. Chọn Tools >> Library Package Manager >> Manage NuGet Packages For Solution và tìm kiếm log4net. Cài đặt nó và chọn (các) dự án bạn muốn thêm tham chiếu log4net. enter image description here

  3. Sửa 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(); 
      } 
     } 
    } 
} 
  1. Thêm log4.config, nhấp chuột phải và chọn Properties sau đó chọn Copy to Output Directory - Copy If Newer.
<?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> 
  1. Sửa App.Config để nó phù hợp với những điều sau đây:
<?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> 
  1. Chạy chương trình và quan sát tệp log.txt được tạo trong thư mục đầu ra \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 
    
  2. Trong tương lai, nếu bạn muốn thêm log4net vào một Dự án khác, hãy chọn Tools >> Library Package Manager >> Manage NuGet Packages For Solution chọn log4net và nhấp vào Manage rồi đánh dấu vào Dự án bạn muốn thêm log4net vào. enter image description here

+0

Chỉ cần lưu ý trên configSections: "Nếu phần tử này nằm trong tệp cấu hình, nó phải là phần tử con đầu tiên của phần tử ." https://msdn.microsoft.com/en-us/library/aa903350(v=vs.71).aspx – unicorn2

+0

bạn có thể xây dựng trên cuộn cài đặt App.config không? – jxramos

+0

@jxramos Cài đặt trong app.config kiểm soát mọi thứ cần thực hiện với ghi nhật ký, bao gồm việc ghi vào tệp hay không, định dạng mỗi dòng là gì, nếu ghi vào bảng điều khiển, v.v. Có thể dễ dàng xem tài liệu log4net cho tất cả các tùy chọn. – Contango

2

Tuyệt vời. Những câu trả lời là chính xác ... ngoại trừ việc họ đã không làm việc cho tôi

tìm kiếm trên net và cuối cùng phát hiện ra tôi đã mất tích dòng sau trong Assembly.cs:

[assembly: log4net.Config.XmlConfigurator]