2013-08-16 50 views
1

我有2個服務有log4net引用和XmlConfigurator設置在AssemblyInfo.cs中觀看。爲什麼共享log4net dll會導致優先日誌記錄行爲?

如果我在本地機器上運行這兩個服務,兩者都從單獨的目錄運行,將Copy Local設置爲Log4Net dll。兩種服務都記錄正常。

當我把服務推向生產時,他們都坐在在同一個目錄(我沒有發言權),我看到的行爲很奇怪。如果一個服務啓動,它會記錄正常,但其他服務不會記錄。陌生人,如果我關閉他們並開始第二個,它會記錄正常,但第一個不記錄。

我假設服務一次只能登錄一個服務,但這似乎沒有任何意義,因爲它們是單獨的服務。

有沒有人知道這裏會發生什麼?

+0

服務是否嘗試登錄到同一個文件? – sgmoore

+0

@sgmoore,很好的問題,不,單獨的文件。 ADO appender儘管記錄到同一個表中。 –

+0

可能最好啓用log4net上的內部日誌記錄。 (請參閱http://stackoverflow.com/questions/756125/how-to-track-down-log4net-problems一種方法來做到這一點) – sgmoore

回答

1

它會出現第一個進程鎖定DLL並阻止其他人將相同的文件加載到其應用程序域。只是爲了好玩,你有沒有嘗試製作DLL的副本,更改名稱,然後讓第二個服務引用其他文件?也許是這樣的:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net2nd" /> 
+0

這是一個很好的建議,但我希望避免有2個單獨的dll不同的名字(儘管可能會這樣)。我很困惑爲什麼log4net dll會被第一個進程鎖定,這可能嗎? –

1

不是說你正在尋找改變的.dll在飛行的文件,但你可能想看看加載log4net的.dll文件使用卷影複製服務。我從這個答案得到的想法:https://stackoverflow.com/a/226589/151234

一些有用的提示可以找到here。這與您在放入新的.dll文件時ASP.NET的工作原理類似。