2015-05-21 14 views
15

Tôi có một bên thứ ba sử dụng một tập tin cấu hình mà trông như thế này:chuyển hướng log4net bản ghi từ bên thứ ba

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
    <!--Others sections--> 
    </configSections> 

    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value=".\logs\logclient.txt" /> 
     <appendToFile value="false" /> 
     <rollingStyle value="Date" /> 
     <maximumFileSize value="1000KB" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 

</configuration> 

Các mã kiểm tra vào bên thứ ba trông giống như:

LogManager.GetRepository(Assembly.GetCallingAssembly()), configFile); 

LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

Tôi muốn các bên thứ ba dll sử dụng appender của riêng tôi được định nghĩa trong tập tin cấu hình của riêng tôi. Làm thế nào tôi có thể quản lý điều này?

NB:

  • bên thứ ba cần phải sử dụng tập tin cấu hình riêng của mình vì người khác phần là bắt buộc và tôi không thể thêm chúng vào tập tin của tôi
  • tôi có thể sửa đổi tập tin cấu hình của bên thứ ba, tôi không thể sửa đổi của tôi
+0

DLL sử dụng app.config của bất cứ EXE lưu trữ chúng. Vì vậy, nếu bạn tải DLL, nó đang sử dụng app.config của bạn. Vì vậy, tôi bối rối khi bạn nói "bên thứ ba cần sử dụng tệp cấu hình của riêng nó". .NET app.configs không hoạt động theo cách đó. –

+0

Trên thực tế tôi có hai tập tin cấu hình: một app.config (sử dụng bởi mã của tôi) và một thirdParty.dll.config (được sử dụng bởi bên thứ ba). Tôi không biết nếu có liên quan nhưng các thirdParty.dll không phải là trong cùng một thư mục như ứng dụng của tôi và nó được nạp bằng tay và được sử dụng bởi sự phản ánh. – Toto

+0

Thay vì cố gắng ép buộc nó sử dụng appender được định nghĩa trong cấu hình của riêng bạn, tại sao không chỉ sao chép và dán nó vào cấu hình của họ, và thì đấy ...? – johnjps111

Trả lời

0

Nếu ứng dụng .NET của bạn tham chiếu đến thirdparty.dll, khi chạy ứng dụng sẽ bỏ qua tệp thirdparty.dll.config hoàn toàn. Ngoài ra, các thirdparty.dll sẽ không đón các thiết lập trong thirdparty.dll.config vì nó được mong đợi để được tải bởi exe.

Điều bạn phải làm là hợp nhất (hoặc sao chép) nội dung của tệp thirdparty.dll.config vào tệp app.config của riêng bạn. Cả ứng dụng của bạn và thirdparty.dll sẽ có thể nhận các cài đặt trong app.exe.config của bạn và bạn chỉ cần duy trì một tệp .config

Hơn nữa, bạn có thể thêm các ứng dụng bổ sung vào phần log4net và nó sẽ được cả hai ứng dụng của bạn và thirdparty.dll đón nhận và 01party.dll

+0

Bên thứ ba tải thủ công cấu hình log4net từ tệp mà họ mong muốn có dạng ThirdPartyDllPath.dll.config – Toto

2

Theo tôi hiểu, bạn phải sử dụng tệp cấu hình của bên thứ ba và bạn có thể sửa đổi nó.

Thuộc tính configSource nên làm việc để chuyển hướng phần cấu hình log4net của tệp cấu hình bên thứ ba của bạn.

Trong tập tin cấu hình của bên thứ ba:

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
</configSections> 

<log4net configSource="pathtoyourlog4net.config" /> 
0

thư viện log4net là một công cụ để giúp những điều khoản đăng nhập đầu ra lập trình viên với một loạt các mục tiêu đầu ra.

Bạn cũng có thể cấu hình log4net trong mã thay vì sử dụng một tập tin cấu hình, this SO gửi giải thích rõ ràng các câu hỏi.

Thay đổi appender động:

public static void ChangeFilePath(string appenderName, string newFilename) 
     {      
      log4net.Repository.ILoggerRepository repository = log4net.LogManager.GetRepository(); 
      foreach (log4net.Appender.IAppender appender in repository.GetAppenders()) 
      { 
       if (appender.Name.CompareTo(appenderName) == 0 && appender is log4net.Appender.FileAppender) 
       { 
        log4net.Appender.FileAppender fileAppender = (log4net.Appender.FileAppender)appender; 
        fileAppender.File = System.IO.Path.Combine(fileAppender.File, newFilename); 
        fileAppender.ActivateOptions();     
       } 
      }   
     } 

Reference post

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