簡體   English   中英

dll的不同實例的通用log4net日志記錄

[英]Common log4net logging for different instances of a dll

我在配置log4net使其以所需的方式工作時遇到問題。 我有一個類庫Library.dll,該類庫同時由我的應用程序Mine.exe和第三方應用程序Other.exe使用。 我有另一個Mine.exe和Library.dll都使用的類庫Util.dll。

Mine.exe和Other.exe並行運行,我希望Library.dll的兩個實例使用相同的日志文件。 它也應該與Mine.exe的日志文件分開。 從Library.dll調用時,Util.dll應登錄到Library.dll日志文件,從Mine.exe調用時,應記錄到Mine.exe日志文件。

編輯:我想這很難遵循,這就是我希望我工作的方式:

Mine.exe日志到Mine.log
Other.exe不記錄任何內容(第三方應用程序)
Mine.exe-> Library.dll日志到C:\\ Library.log
Other.exe-> Library.dll日志到C:\\ Library.log
Mine.exe-> Util.dll記錄到Mine.log
Mine.exe-> Library.dll-> Util.dll記錄到C:\\ Library.log
Other.exe-> Library.dll-> Util.dll記錄到C:\\ Library.log Other.exe不會直接調用Util.dll。

首先,我嘗試使用以下方法在Library.dll中加載自定義log4net配置:

log4net.Config.XmlConfigurator.Configure(new FileInfo("Library.log4net.config"));

但這導致Mine.exe也記錄到Library.dll日志文件中。

然后,我嘗試在Library.dll中添加以下程序集屬性:

[assembly: log4net.Config.Repository("Library")]

這使日志分開,但是即使從Library.dll中調用,Util.dll也會記錄到Mine.exe日志文件中。 我想我可以在Util.dll中使用Repository(“ Util”),在Library.dll中使用AliasReposity(“ Util”,“ Library”)和在Mine.exe中使用AliasReposity(“ Util”,“ Mine”),但實際上我有很多類庫中的項目,並且寧願不走這條路。

關於如何使它工作的任何想法?

/安德烈亞斯

老實說,我不會共享日志文件。 如果從兩個進程登錄到文件,可能會遇到各種各樣的線程問題。 通常,一個log4net實例(如果另一個實例)將無法記錄日志,因此它將導致日志條目丟失。 另外,如果它們在同一個日志文件中,則需要在日志格式化程序中刪除進程名稱,以便知道源。 聽起來很復雜。 按照慣例,我通常會執行以下操作:

  • 在每個進程中引用相同的log4net dll。
  • 分別在process1.exe.config和process2.exe.config中創建一個log4net配置部分。
  • 在每個配置中分別為process1.exe.log和process2.exe.log添加文件追加器。

您為兩個進程得到兩個文件,但這更易於管理。 您可以獲得可以同時顯示兩個日志的日志文件監視程序(盡管我傾向於不使用該方法),例如: http : //tailforwin32.sourceforge.net/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM