2012-03-15 15 views
24

Tôi sử dụng log4Net cho nhật ký hệ thống của mình. Nút connectionString là bắt buộc nếu loại appender là AdoNetAppender trong Log4Net. Tuy nhiên, tôi đã có một connectionString trong trang web của tôi, nơi tôi sử dụng Log4Net.Làm cách nào tôi có thể sử dụng connectionString của trang web hiện tại cho log4Net thay vì định cấu hình

Làm cách nào tôi có thể sử dụng connStr của trang web cho log4Net thay vì định cấu hình lại cùng một lần nữa trong tệp cấu hình log4net?

+0

Đây là câu hỏi tương tự như http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere- trong – user1069816

Trả lời

0

Bạn có thể làm điều đó bằng cách kế thừa AdoNetAppender.

  • 1) Tạo lớp kế thừa từ AdoNetAppender.
  • 2) Tiếp theo tạo thuộc tính ConnectionStringName sẽ đặt thuộc tính Log4Net ConnectionString thành chuỗi kết nối được truy xuất bởi .Net ConfigurationManager.
  • 3) Tạo một mục ConnectionStringName trong phần AdoNetAppender của tệp cấu hình của bạn để ánh xạ tới một connectionString hiện có trong phần connectionStrings của tệp cấu hình của bạn.

Xem bên dưới "Ken Burkhardt" blog để biết chi tiết.

http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html

+0

Cảm ơn minmin, tôi không thể mở liên kết bạn chứng minh những gì bạn nói với tôi nên được tìm thấy từ các liên kết dưới đây http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net -adonetappender-from-other-in. Nhưng nó không hoạt động. –

0

Điều này có thể xảy ra trong phiên bản 1.2.11. Dưới đây là các liên kết đến các vấn đề:

https://issues.apache.org/jira/browse/LOG4NET-88

+0

cảm ơn Stefan tôi đã sử dụng cách thức được cung cấp bởi @Narayan Akhade –

14

Bạn có thể cập nhật ConnectionString của AdoNetAppender động, sau khi bạn đã cấu hình log4net cho trang web của bạn, thường là trong Global.asax. Sau cuộc gọi của bạn để cấu hình log4net bằng cách sử dụng XmlConfigutor() hoặc một cái gì đó .. bạn có thể gọi phương thức dưới đây để kiểm tra tất cả AdoNetAppenders và cập nhật connectionString bắt buộ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 
      } 
     } 
    } 
} 
1

Bạn có thể làm điều này bằng cách viết một appender tùy chỉnh ADO.NET và trọng các chuỗi kết nối:

public new string ConnectionString { 
    get { 
     return base.ConnectionString; 
    } 

    //you could set your own connection string here 
    set { 
     base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"]. 
      ConnectionString; 
    } 
} 

Bạn có thể ghé thăm http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ cho một ví dụ hoàn chỉnh

+0

tôi đã sử dụng con đường của Narayan Akhade. cảm ơn –

7

Bây giờ bạn có thể sử dụng ConnectionStringName tài sản của AdoNetAppender làm điểm nó đến một connectionString được đặt tên trong tệp ứng dụng hoặc web.config của bạn:

AdoNetAppender.ConnectionStringName Property

34

Nó khá đơn giản hơn, bạn chỉ cần thay thế cấu hình phụ kiện connectionString.

Ở vị trí của chuỗi kết nối:

<connectionString value="[Complete Connection]" /> 

Bạn chỉ cần sử dụng cấu hình connectionStringName:

<connectionStringName value="ApplicationConnection" /> 

Và sau đó bạn có chuỗi kết nối ứng dụng của bạn:

<connectionStrings> 
    <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" /> 
</connectionStrings> 

Thật không may bạn phải có connectionType với connectionStrin gName, ví dụ:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> 
    <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionStringName value="ApplicationConnection" /> 
... 
+1

Tính năng này có hoạt động với các chuỗi kết nối được mã hóa không? Tôi đã nhận nó làm việc với văn bản thuần, nhưng việc đăng nhập dừng lại khi tôi mã hóa chuỗi kết nối – raider33

+0

Điều này làm việc hoàn hảo cho tôi! Và kể từ khi tôi sử dụng xuất bản hồ sơ cho các môi trường khác nhau, điều này hoàn toàn làm cho ngày của tôi, vì nó đơn giản hóa rất nhiều những gì tôi đã làm để làm cho cấu hình làm việc – JohanLarsson

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