2010-10-19 33 views
21

Tôi có tập tin sau Log4net.config trong thư mục bin của tôi:cấu hình Log4net từ thuộc tính lắp ráp không tải tập tin cấu hình

<?xml version="1.0" encoding="utf-8" ?> 
<log4net xmlns="urn:log4net"> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <param name="file" value="MyLogFile.log"/> 
     <param name="appendToFile" value="false"/> 
     <layout type="log4net.Layout.PatternLayout"> 
      <param name="ConversionPattern" value="%date (%logger) [%5level] - %message" /> 
     </layout> 
    </appender> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <param name="ConversionPattern" value="%date (%logger) [%5level] - %message" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="FileAppender" /> 
     <appender-ref ref="ConsoleAppender"/> 
    </root> 
    <logger name="NHibernate" additivity="false"> 
     <level value="WARN"/> 
    </logger> 
</log4net> 

Và đoạn mã sau vào tập tin AssemblyInfo.cs của tôi:

using System.Reflection; 
using System.Runtime.CompilerServices; 
using System.Runtime.InteropServices; 

[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: AssemblyTitle("My Project")] 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.config", Watch = true)] 

Khi tôi chạy chương trình, tôi nhận được kết quả gỡ lỗi log4net sau:

log4net: log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [D:\Data\Projects\Active\Clients\MyProject\src\MyProject.Importer\bin\Debug\log4net.dll]. (.NET Runtime [4.0.30319.1] on Microsoft Windows NT 6.1.7600.0) 
log4net: DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net: DefaultRepositorySelector: Creating repository for assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] 
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] Loaded From [D:\Data\Projects\Active\Clients\MyProject\src\MyProject.Importer\bin\Debug\MyCompany.Framework.dll] 
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy] 
The thread 'vshost.RunParkingWindow' (0xd30) has exited with code 0 (0x0). 
The thread '<No Name>' (0x15d0) has exited with code 0 (0x0). 
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository] 

Tải log4net, nhưng dường như không xử lý tệp cấu hình của tôi. Khi tôi nhận xét thuộc tính trong AssemblyInfo.cs và chạy mã sau trong quá trình khởi tạo chương trình của tôi, nó hoạt động như mong đợi:

var log4netConfig = "Log4net.config"; 
var log4netInfo = new FileInfo(log4netConfig); 
log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netInfo); 

Tôi đang làm gì sai? Tôi muốn tải từ AssemblyInfo.cs.

Trả lời

30

Tôi cũng gặp sự cố với phương pháp này để đăng nhập log4net. documentation cho biết bạn phải thực hiện cuộc gọi rất sớm trong quá trình khởi động ứng dụng

nếu bạn sử dụng thuộc tính cấu hình, bạn phải gọi log4net để cho phép nó đọc thuộc tính. Một cuộc gọi đơn giản tới LogManager.GetLogger sẽ làm cho các thuộc tính trên assembly gọi được đọc và xử lý. Vì vậy, bắt buộc phải thực hiện cuộc gọi đăng nhập càng sớm càng tốt trong khi khởi động ứng dụng, và chắc chắn trước khi bất kỳ hội đồng bên ngoài nào được nạp và gọi.

Thử đặt một trình ghi nhật ký trong cùng một lớp khởi động ứng dụng của bạn (program.cs, app.xaml, bất kỳ thứ gì). Ví dụ

private static readonly ILog Log = LogManager.GetLogger(typeof(Program)); 

Và đối với đá, làm cho bất kỳ cuộc gọi đến log (thậm chí một trong đó là lọc hoặc đánh giá ra của quá trình append, nó nên buộc log4net để đánh giá kho của bạn/hệ thống cấp bậc).

static Program() 
{ 
    Log.Debug("Application loaded."); 
} 
+3

Như thường lệ, hãy kiểm tra đầu ra gỡ lỗi log4net nội bộ '' –

+0

Đối với ứng dụng dịch vụ web, đây nên là đâu? – oliverdejohnson

+0

@oliverdejohnson Kiểm tra http://logging.apache.org/log4net/release/faq.html để biết cách bật tính năng sửa lỗi nội bộ log4net? nó cho thấy cách thiết lập trình gỡ lỗi và trình theo dõi. –

0

Tôi đang sử dụng phần Web.Config để cấu hình và Logger tự đăng nhập các sự kiện, Bootstrapping Logger từ global.asax

static ILog logger = LogManager.GetLogger(<LoggerName>); 

protected void Application_Start() 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
} 

Cố bootstrapping nó khỏi global.asax

3

tôi giữ log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config"))); trong Global.asax.cs bên trong của Application_Start() ... Vì vậy, tôi không cần phải thực hiện lệnh trên tất cả các nơi.

-1
var log4NetPath = Server.MapPath("~/log4net.config"); 

FileInfo fileInfo = new FileInfo(log4NetPath); 

XmlConfigurator.ConfigureAndWatch(fileInfo); 
+2

Bạn cần thêm một số văn xuôi ở đây để giải thích mã này làm gì. Nó đã được gắn cờ và được hiển thị trong hàng đợi đánh giá Bài viết có chất lượng thấp, do đó, nếu không có nguy cơ bị xóa. – sideshowbarker

5

cuối cùng tôi chỉ cần tìm ra giải pháp đơn giản, bạn có thể được giúp đỡ có

  1. toàn cầu.tuyến Asax trong chức năng bắt đầu

    protected void Application_Start() 
    { 
        log4net.Config.XmlConfigurator.Configure(); 
    } 
    
  2. Trong bất kỳ của lớp nơi sử dụng khai thác gỗ ở cấp lớp

add namespace

using log4net; 

thêm dòng mã này ở cấp lớp

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
  1. chức năng sử dụng đăng nhập vào bất kỳ cuộc gọi hành động

    log.Error("test error q111.."); 
    
  2. cấu hình

    <configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net " /> 
    </configSection> 
    <log4net debug="true"> 
    
    <!--AdoNet appender is use for write log file into sql server--> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
        <bufferSize value="1" /> 
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
        <connectionString value="Data Source=DESKTOP-NLH31FH; Initial Catalog=SmallBizDb;Integrated Security=true" providerName="System.Data.SqlClient" /> 
        <commandText value="INSERT INTO [dbo].[Logs] ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@logdate,@thread, @loglevel, @logger, @message, @exception)" /> 
        <parameter> 
        <parameterName value="@logdate" /> 
        <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="@loglevel" /> 
        <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> 
    <!--Add appender which you want to use, You can add more then one appender . Like if you want save log both plain text or sql server ,Add both appender.--> 
    
    <root> 
        <level value="Debug" /> 
        <!--<appender-ref ref="RollingLogFileAppender" />--> 
        <!--Enable this line if you want write log file into plain text file--> 
        <appender-ref ref="AdoNetAppender" /> 
        <!--Enable this line if you want write log file into sql server--> 
    
    </root> 
    
    </log4net> 
    
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    </configuration> 
    

nó có thể giúp tất cả và dễ sử dụng. cảm ơn

1

Tôi đã sửa lỗi này bằng cách thêm RepositoryAttribute vào tệp AssemblyInfo.cs của hội đồng vi phạm.

[assembly: AssemblyTrademark("")] 
[assembly: AssemblyCulture("")] 
[assembly: RepositoryAttribute("Your.Namespace.Here")] 
+0

Tôi đã thử ở trên, và bây giờ log4net không đưa ra lỗi cho việc tạo kho lưu trữ để lắp ráp, nhưng nó vẫn không ghi vào tệp nhật ký. Sau khi tạo kho lưu trữ, nó chỉ tắt máy. bất kỳ ý tưởng?? – meghana

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