2009-08-10 23 views
5

câu hỏi thực sự đơn giản -> tôi dường như không thể lấy bất kỳ dữ liệu nào từ Log4Net trong ứng dụng ASP.NET của mình. Tôi đã có một ASP.NET đơn giản trang web, mà tham chiếu đến một thư viện lớp. trong thư viện lớp này, tôi có một số dòng mà gọi logger.Không thể lấy Log4Net để làm việc trong trang web ASP.NET của tôi: (

tôi đang cố gắng để đọc dữ liệu đầu ra log4net trong Visual Studio 2008 của tôi gỡ lỗi Output cửa sổ.

Đây là mã của tôi và cấu hình của tôi ...

//Class Library project 
//File: Foo.cs 
public class FooService 
{ 
    private static readonly ILog log = LogManager.GetLogger(typeof(FooService)); 

    public FooService() 
    { 
     // NOTE: To play with my L4N settings, I'll call Debug once, then Info once. 

     log.Info("Starting Constructor"); 

     // ... snip ... 

     log.Debug("Leaving Constructor"); 
    } 
} 


// ASP.NET Website project 
// File: global.asax 
void Application_Start(object sender, EventArgs eventArgs) 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
} 

// File: Whatever.aspx.cs 
// A delegate method (when a user clicks a button) creates the FooService() instance. 

// File: web.config 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" /> 

    // .... 

</configSections> 


<log4net> 
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Green" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> 
    </appender> 

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Blue" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
    </appender> 

    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="OutputDebugStringAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="ColoredConsoleAppender" /> 
    </root> 
    <!-- Specify the level for some specific categories --> 
    <logger name="DotNetOpenAuth"> 
     <level value="ALL" /> 
    </logger> 
</log4net> 

Chúc mừng mọi trợ giúp hoặc đề xuất ...

EDIT: Đã thêm RollingLogFileAppender.

+0

Tại sao bạn sử dụng ứng dụng ColorConsoleAppender trong ứng dụng Web? – RichardOD

+0

Vì tôi hy vọng console.out được chuyển hướng đến cửa sổ Debugger Output lạ này .... –

Trả lời

5

Tôi đã có cùng một vấn đề này và tôi nghĩ rằng nó đã nhìn vào web.config sai hoặc một cái gì đó. Cuối cùng tôi đã tách ra log4net.config khỏi web.config và đặt đường dẫn tới nó \ inetpub \ Logs \ log4net.config và tất cả đều tốt.

UDPATED ON REQUEST: được chỉnh sửa từ phiên bản hơi phức tạp hơn.

<?xml version="1.0" encoding="utf-8"?> 
<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level (%logger:%line) - %message%newline" /> 
     </layout> 
    </appender>\ 

    <root> 
     <!--ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF--> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

Và nó được cấu hình trong mã như sau:

 var logpath = WebConfigurationManager.AppSettings["LogConfigPath"] ?? @"\Inetpub\Logs\log4net.config"; 
     var finfo = new System.IO.FileInfo (logpath); 
     XmlConfigurator.Configure(finfo); 
+0

anh chàng - u đã kết thúc cách đăng nhập vào cửa sổ OUTPUT trực quan (debugger)? hoặc vào một tập tin? –

+0

vâng, tôi đang sử dụng TraceAppender đi đến cơ sở OutputDebugString và tôi xem nó trong VS hoặc với http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – kenny

+0

wow. rằng ứng dụng sysinternals là tuyệt vời :) tôi thích có công cụ và đây là một điều kew :) Có thể u xin vui lòng xây dựng chi tiết (ví dụ như đăng một ảnh chụp màn hình của các tập tin .config của bạn log4net cài đặt), xin vui lòng? –

5

ASP.Net có hạn chế về sử dụng truy cập hệ thống tập tin, vì vậy hãy thử để chỉ một cách rõ ràng mục dưới App_Data (là nó được phép) đây mẫu làm việc của tôi:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="App_Data\logging\log-file.txt"/> 

Hoặc với rollover

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
+0

Heh - dude. Tôi không bao giờ nói rằng tôi đang sử dụng hệ thống tập tin :) đi xem lại ..... –

+0

Chỉ cần thử mẫu làm việc này, sau khi bạn có thể tách riêng cấu hình không hoạt động từ an ninh không điều chỉnh. – Dewfy

+0

ok .. tôi sẽ cho cái này đi ... hmm. một số lỗi trong cửa sổ OUTPUT ... og4net: ERROR XmlHierarchyConfigurator: Không tìm thấy appender có tên [RollingFileAppender]. log4net: ERROR XmlHierarchyConfigurator: Không tìm thấy ứng dụng có tên [RollingFileAppender]. log4net: ERROR XmlHierarchyConfigurator: Không thể tìm thấy tài sản [bản đồ] để thiết lập đối tượng trên [log4net.Appender.OutputDebugStringAppender] log4net: ERROR XmlHierarchyConfigurator: Không thể tìm thấy tài sản [bản đồ] để thiết lập đối tượng trên [log4net.Appender.OutputDebugStringAppender] –

0

Có ít nhất 2 vấn đề có thể:

  • Cách địa chỉ đến tập tin được chỉ định, hãy thử sử dụng một tuyệt đối thay vào đó.
  • Quá trình thực hiện cuộc gọi cần quyền sửa đổi tệp. Kiểm tra xem tài khoản người dùng có ghi vào tệp nhật ký có quyền làm như vậy hay không.

Để gỡ lỗi, tôi sẽ tạo và trống thư mục, cung cấp cho mọi người toàn quyền kiểm soát, định cấu hình để đăng nhập vào thư mục đó. Sau đó kiểm tra nó, thấy rằng nó hoạt động, sau đó dần dần thắt chặt an ninh đến một mức độ chấp nhận được.

3

Ok, tìm thấy câu trả lời. Tôi cần sử dụng TraceAppender.

Tệp cấu hình ứng dụng có thể được sử dụng để kiểm soát những gì người nghe thực sự được sử dụng. Xem tài liệu MSDN cho lớp Trace để biết chi tiết về định cấu hình theo dõi hệ thống.

Sự kiện được viết bằng phương pháp System.Diagnostics.Trace.Write (chuỗi, chuỗi) . Tên nhật ký của sự kiện là được chuyển làm giá trị cho danh mục tên cho phương thức Viết.

Dưới đây là dữ liệu tập tin cấu hình của tôi ...

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 
+0

+ 1- như bạn đã nói công trình này! – RichardOD

0

tôi đã thêm dòng sau file Global.asax, và nó hoạt động .. !! log4net.Config.XmlConfigurator.Configure();

+1

Er ... Tôi đã có được liệt kê trong bài viết mở đầu của tôi. Điều đó nói rằng, tôi đã giảm sử dụng Log4Net và bây giờ tôi đang sử dụng NLog .. đó là SOOOO IMO tốt hơn nhiều :) Và nó luôn luôn làm việc (cộng với nó mới hơn và vẫn nhận được phát triển tình yêu). –

Các vấn đề liên quan