我寫了一個單一的C#2.0應用程序(叫它myapp)。
Myapp被調用很多次,每次調用都會生成一種「任務」,這個任務將在一個單獨的線程中執行。
如果您在短時間內多次調用myapp,則任務將並行執行。
通常我使用log4net進行記錄;我將其配置爲在啓動時通過XmlConfigurator.Configure(<config>.xml)
加載xml文件,然後在每個需要記錄器的課程中使用靜態LogManager.GetLogger(name)
,非常簡單。
相反,這種情況很具有挑戰性。 我需要做的是:基於在每次調用(稱之爲ARG)接受args來一個,我需要一個不同的RollingFileAppender進行,在不同的文件,電子記錄。 G。日誌。
只是打一個比方:
第一個呼叫:myapp.exe -arg:01
- MYAPP創建線程1
- 設置一個新的RollingFileAppender進行到01.log文件,如果不存在
- 在這個線程使用必須登錄對象在01.log文件
第二個呼叫:myapp.exe -arg:02
- 創建線程2
- 設置一個新的RollingFileAppender進行到02.log文件,如果不存在
級 - 在這個線程使用的對象必須登錄02.log文件,但不是在log.01
第三個呼叫:myapp.exe -arg:01
- 創建thread03
- 讓RollingFileAppender進行到01.log文件(它已經存在!)
- 在這個線程使用的對象必須登錄01.log文件,但不是在log.02
等。 我不需要在xml文件中保留RollingAppender的配置,我可以以編程方式創建它;我的想法是使用靜態包裝類,稱之爲LogHelper,如果它們不存在基於ARG創建附加目的地,以及調度權需要通過對象時(在課堂上我會使用類似ILog log = LogHelper.GetLogger(name, arg
)獲得的ILog istances一個記錄器來代替o使用默認的log4net方法LogManager.GetLogger(name)
)。因此,如果我在2個不同的線程中有2個同一類的事件,當我記錄消息去每個文件一個,根據或arg(我將注入arg在每個對象,如果需要的話)。
我在StackOverflow中瀏覽了很多線程,但是我找不到解決方案。
有人能指點我正確的方向嗎?
在此先感謝。
嗨Ferdinando Santacroce,首先是所有的偉大的研究,恭喜... 如果您使用控制檯應用程序的代碼日誌輸出也發送到控制檯,你知道嗎? – oakman
謝謝,我希望你覺得它有用。是的,我知道,謝謝:) –