2013-02-26 17 views
11

Không có gì xảy ra với cấu hình sau.log4net với EventLogAppender không đăng nhập

App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <log4net> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Form1.cs (Ví dụ)

public partial class Form1 : Form 
{ 
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

    public Form1() 
    { 
     InitializeComponent(); 

     log.Fatal("Test!"); 
    } 
} 
+0

Phiên bản studio nào? –

+0

Visual Studio 2012 + Windows 8. – timmkrause

Trả lời

13

Bạn đang thiếu cấu hình gốc vì vậy bạn cần một cái gì đó giống như

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> 
    </startup> 
    <log4net debug="true"> 
     <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
     <applicationName value="MyApp" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
     </appender> 


     <root> 
     <level value="All" /> 
     <appender-ref ref="EventLogAppender" /> 
     </root> 


    </log4net> 
</configuration> 

Cũng lưu ý rằng nếu chương trình của bạn được gọi là app.exe, sau đó bạn cần một nguồn eventlog gọi app.exe. Nếu điều này không tồn tại, thì Log4net sẽ cố gắng tạo nó, nhưng điều đó yêu cầu quyền quản trị, vì vậy bạn có thể cần chạy chương trình của bạn với tư cách quản trị viên ít nhất một lần để tạo nguồn sự kiện này. Để tránh điều này, nguồn sự kiện thường được tạo ra như là một phần của quy trình cài đặt đã chạy như quản trị viên.

+0

Kết hợp với các dòng mã ngang hàng cuối cùng nó hoạt động. Cảm ơn bạn! :) Có một lỗ hổng cuối cùng: Các mục nhật ký chỉ hiển thị nếu tôi bắt đầu tệp .exe nhưng không phải khi tôi nhấn f5. Bất kỳ ý tưởng về điều cuối cùng? – timmkrause

+0

Bạn có bất kỳ thông báo lỗi nào trong cửa sổ đầu ra của Visual Studio không? Phần debug = "true" của cấu hình ở trên sẽ cung cấp cho bạn thông tin về những gì log4net đang làm và nên bao gồm các thông báo lỗi nếu nó không thành công. (Bạn có thể muốn vô hiệu hóa chế độ gỡ lỗi khi bạn có đăng nhập của bạn làm việc) – sgmoore

+0

"log4net: ERROR [EventLogAppender] ErrorCode: GenericFailure. Bắt một SecurityException cố gắng truy cập EventLog. Rất có thể nguồn sự kiện Log4NetEventViewer.vshost.exe không tồn tại và phải được tạo bởi một quản trị viên cục bộ. " - Tôi bắt đầu .exe là quản trị viên để tạo nguồn sự kiện nhưng không phải là phiên bản VS hoặc vshost. Việc chạy tệp .vshost.exe dưới dạng quản trị viên cũng không đủ, bởi vì nó bắt đầu một .exe với hậu tố "-clr2" hoặc một cái gì đó. Chạy VS là quản trị viên khi đã giải quyết nó. CẢM ƠN BẠN! – timmkrause

5

Bạn nên thêm:

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

trong AssemblyInfo.cs của dự án của bạn . Thao tác này sẽ khởi tạo trình ghi nhật ký. Và đặt log4net vào một tệp có tên log4net.config.

+0

Tôi đã cố gắng đã và sau đó xóa nó một lần nữa bởi vì nó không có hiệu lực. – timmkrause

+0

Xin lỗi, bạn đã đúng. Sau khi tôi thêm phần tử do sgmoore cung cấp, nó vẫn không hoạt động nhưng sau khi tôi thêm dòng của bạn vào AssemblyInfo.cs nó đã hoạt động. – timmkrause

0

Hãy chắc chắn rằng bạn đã cho quyền ghi vào sử dụng của bạn để:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ EventLog \ MyApp

và nếu bạn muốn bổ sung thêm logers phải làm theo danh pháp này:

<root name="EventLog"> 
<level value="ALL"/> 
<appender-ref ref="FirstLog"/> 
</root> 

<logger name="FileLogger" additivity="false"> 
<level value="ALL" /> 
<appender-ref ref="Secong_Log" /> 
</logger> 

Chúc may mắn.