2011-12-28 16 views
24

Tôi đang sử dụng log4net trong dự án ASP.NET MVC3 của tôi, nhưng tất cả các cách đăng nhập tài sản như IsDebugEnabled == falseTại sao tất cả các cấp độ log4net của tôi đều sai?

Trong AssemblyInfo của tôi, tôi có:

[assembly: XmlConfigurator(Watch = true)] 

Trong lớp log của tôi, tôi có

public Log4NetLogger() 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
} 

thứ cấu hình có liên quan của tôi trong Web.Config là:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
     </sectionGroup> 
    </configSections> 

    <log4net debug="false"> 
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="{removed}" /> 
     <commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
     <parameter> 
      <parameterName value="@log_date" /> 
      <dbType value="DateTime" /> 
      <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
      <parameterName value="@thread" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@log_level" /> 
      <dbType value="String" /> 
      <size value="50" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%level" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@logger" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@message" /> 
      <dbType value="String" /> 
      <size value="4000" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@exception" /> 
      <dbType value="String" /> 
      <size value="2000" /> 
      <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     </appender> 
     <!--Possible levels:--> 
     <!--DEBUG--> 
     <!--INFO--> 
     <!--WARN--> 
     <!--ERROR--> 
     <!--FATAL--> 
     <root> 
     <level value="All" /> 
     <appender-ref ref="AdoNetAppender" /> 
     </root> 
    </log4net> 

    </applicationSettings> 

</configuration> 

Tôi đã bị thất vọng đến một điểm chỉ muốn làm

public Log4NetLogger() 
{ 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    Logger.IsDebugEnabled = true; 
} 

Tuy nhiên tất nhiên Logger.IsDebugEnabled không có bất kỳ setters:/

gì để tôi phải làm gì để có được điều chết tiệt này để làm việc?

+0

Bạn có thể chấp nhận một trong các câu trả lời dưới đây nếu bạn đã sắp xếp sự cố này không? –

Trả lời

2

Tôi chưa bao giờ thấy <level value="All" /> trước đây, thường tôi chỉ đặt value thành một trong các cấp (vì chúng bao gồm các cấp phía trên chúng hoặc bên dưới chúng như bạn đã liệt kê trong cấu hình của bạn)). Một cái gì đó như thế này:

<level value="DEBUG" /> 

Bạn cũng có thể thử kiểm tra bằng trình ghi nhật ký rõ ràng, chỉ để xem sự cố có thể là vấn đề khác không. Một cái gì đó đơn giản tiếp giáp với appender nút (s) như thế này:

<logger name="Log4NetTEST" > 
    <level value="DEBUG" /> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 

Sau đó, khi thử nghiệm nó trong mã của bạn, bạn muốn tạo ra các logger như thế này:

LogManager.GetLogger("Log4NetTEST"); 
+2

Tôi đang sử dụng '' thành công kể từ năm :-) –

+2

fwiw: Các giá trị có thể cho Log4Net là: TẤT CẢ, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Hãy nhớ rằng, đây là trường hợp nhạy cảm là tốt. –

6

Log4net hy vọng phần cấu hình của nó không được nhóm lại. Bởi vì trong cấu hình của bạn, bạn đã đặt phần log4net của bạn bên trong một log4net ApplicationSettingsGroup (applicationSettings) sẽ không tìm thấy cấu hình của nó. Bạn có thể di chuyển các phần log4net bên ngoài của nhóm hoặc bạn có thể chỉ định nhóm khi gọi XmlConfigurator.Configure:

XmlConfigurator.Configure(
    ConfigurationManager.GetSection(
     "applicationSettings/log4net") as XmlElement); 
+0

Sửa lỗi tuyệt vời! Điều này cũng đã thúc đẩy tôi NUTS !!!! – nterry

3

mức Log là trường hợp nhạy cảm, vì vậy thay vì:

<level value="All" />

nên

<level value="ALL" />

Tôi cũng thấy dễ dàng hơn khi tạo một log4net conf riêng biệt tập tin iguration. Tạo một tập tin gọi là log4net.config và thiết lập thuộc tính của Copy to Output mục-Sao chép luôn - (sao chép cấu hình của bạn từ App.config vào tập tin này)

Sau đó, khi thiết lập việc sử dụng cấu hình:

XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

23

Tôi cũng gặp vấn đề tương tự. Tôi nhận được xung quanh nó bằng cách sử dụng dòng dưới đây của mã trong phương pháp Application_Start trong Global.asax.cs (giả định a.ứng dụng web Net)

log4net.Config.XmlConfigurator.Configure(); 
16

Thay đổi dòng của bạn để sau trong AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

và đặt cấu hình log4net trong tập tin đó.

0

Không được setter cho IsDebugEnabled vì nó là chỉ đọc ..

Sử dụng log4net.Config.XmlConfigurator.Configure(); trong bất kỳ phương pháp trước khi bạn sử dụng đăng nhập

và trong app.config thiết lập nên là:

<root> 
     <level value="ALL" /> 
     <appender-ref ref="AppenderName" /> 
    </root> 
0

Thay đổi dòng của bạn để sau trong AssemblyInfo.cs:

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

Đảm bảo log4net dll được thêm vào và cũng đặt cấu hình log4net trong file web.config như

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" /> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="C:\LOGS\IDMUserRoleManagement\IDMUserRoleManagement.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{yyyy-MM-ddTHH:mm:ss} %-5p [%t] - %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 
2

Dường như bạn đã bỏ lỡ thay đổi cài đặt thuộc tính tệp cấu hình Sao chép vào thư mục đầu ra = "Sao chép luôn" Vui lòng kiểm tra hình ảnh cài đặt này để biết thêm chi tiết. Config file setting Properties

0

Bạn đang thiếu thẻ mở cho applicationSettings. Đó có thể là nguyên nhân

0

nếu tập tin lớp log (Log4NetLogger) là trong một thư viện lớp một mình, sau đó mã: [assembly: log4net.Config.XmlConfigurator (C .... phải ở trong thư viện cùng lớp .

ví dụ: lib 1: my.web (một dự án MVC) lib 2: my.common (một dự án thư viện lớp)

nếu bạn gói mã logmanager trong my.common, sau đó "[ assembly: log4net.Config.XmlConfigurator (C ... "NÊN ĐƯỢC TRONG my.common, nếu bạn đặt nó trong my.web, nó sẽ không hoạt động!