2010-03-14 29 views
41

Tôi đã có chuỗi kết nối db trong tệp web.config của mình. Tôi đã quét tài liệu log4net, nhưng dường như không thể tìm cách sử dụng nó trong phần log4net của tệp web.config của tôi. Có thể làm điều gì đó như thế này không?Bạn có thể kéo connectionString cho một log4net AdoNetAppender từ một nơi khác trong tệp web.config không?

<connectionStrings> 
    <add name="connStr" connectionString="Data Source=localhost; ..." /> 
</connectionStrings> 

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <connectionString connectionStringName="connStr"/> 
     ... 
</log4net> 

Trả lời

32

Tạo lớp học mở rộng AdoNetAppender - giả sử, WebAppAdoNetAppender. Triển khai thuộc tính ConnectionString trong lớp đó và truy xuất chuỗi kết nối từ tệp web.config của bạn trong trình thiết lập thuộc tính đó.

<log4net> 
    <appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender"> 
    ... 

...

public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender 
{ 
    public new string ConnectionString 
    { 
     get { return base.ConnectionString; } 
     set { base.ConnectionString = ... } 
    } 
} 
+1

Liên kết của Stefan Egli cho biết rằng thông số chưa tồn tại. Trong thời gian này, điều này có vẻ như là cách tốt nhất để đi về nó. Cảm ơn ông Petrotta! – MrSharps

+0

Tôi sẽ tải/gọi/sử dụng lớp này ở đâu và ở đâu? Tôi chỉ mới bắt đầu với log4net và tôi đang tìm tài liệu một chút thưa thớt. Tôi đang chạy điều này trong một công việc Quartz.NET, mà instantiates logger cho tôi. Làm thế nào tôi sẽ thay thế logger mặc định với lớp con của riêng tôi? Cảm ơn. – InteXX

5

FYI này sẽ được thực hiện trong 1.2.11 theo this. tuy nhiên tôi không biết khi nào họ sẽ giải phóng nó.

+0

âm thanh như tính năng tôi muốn sắp tới là – MrSharps

+2

1.2.11 cuối cùng đã được phát hành ... –

46

Có thể sử dụng chuỗi kết nối DB được chỉ định trong web.config mà không tạo lớp mới, mặc dù bạn sẽ cần sử dụng bản dựng log4net chưa được phát hành. Nó có thể được tải về từ kho SVN http://svn.apache.org/viewvc/logging/log4net/trunk/

cấu hình của bạn sẽ trông như sau:

<connectionStrings> 
    <add name="connStr" connectionString="Data Source=localhost; ..." /> 
</connectionStrings> 

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionStringName value="connStr" /> 
     ... 
</log4net> 

Xin lưu ý rằng connectionType vẫn cần phải được xác định.

+15

Điều này hiện khả dụng trong bản phát hành mới nhất, 1.2.11. Hoạt động tốt. – dove

4

câu trả lời ở trên tất cả đều không có tác dụng. tôi đã nhận một giải pháp cho điều này, tôi đã cố gắng và nó làm việc:

private static void ConfigureLog4Net() 
{ 
    Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy; 
    if(hierarchy != null && hierarchy.Configured) 
    { 
     foreach(IAppender appender in hierarchy.GetAppenders()) 
     { 
      if(appender is AdoNetAppender) 
      { 
       var adoNetAppender = (AdoNetAppender)appender; 
       adoNetAppender.ConnectionString = ConfigurationManager.AppSettings["YOURCONNECTIONSTRINGKEY"].ToString(); 
       adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings 
      } 
     } 
    } 
} 

How i can use the connectionString of the current website for log4Net instead of configuring

+0

Tôi cũng không thể lấy mã ở trên để hoạt động * và điều này đã làm *. Với tôi, tôi phải đảm bảo có một ConnectionString trống trong cấu hình:

0

Tính đến năm 2017 (log4net 2.0.8.0), các công việc sau:

public class MyAdoNetAppender : AdoNetAppender 
{ 
    public MyAdoNetAppender() 
    { 
     ConnectionString = ... 
    } 
} 


<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender"> 

(Rất giống với @ Michael Câu trả lời của Petrotta)

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