2010-12-16 69 views
5

我正在使用ColoredConsoleAppender,我很擔心它是否會掛起我的應用程序。 任何人有經驗log4net是否會掛起應用程序?

+0

不只是ColoredConsoleAppender。即使ConsoleAppender也以相同的方式掛起。 – 2011-03-14 11:53:05

回答

3

從log4net的網站: http://logging.apache.org/log4net/release/faq.html

號log4net的是不可靠的。這是一個盡力而爲和失敗停止記錄系統。

通過fail-stop,我們的意思是log4net不會在運行時拋出意外的異常,從而可能導致應用程序崩潰。如果出於任何原因,log4net會拋出一個未捕獲的異常(除了可能拋出的ArgumentException和ArgumentNullException外),請發送電子郵件至[email protected]郵件列表。未捕獲的異常被視爲需要立即關注的嚴重錯誤。

我個人一直都在使用它,並且從未遇到過問題。

+0

我很擔心至少ColoredConsoleAppender會掛起應用程序。我實際上遇到了一個 – user496949 2010-12-16 06:10:12

+0

@ user496949:我遇到了同樣的問題。我正在使用一個不可思議的過程並使用ColoredConsoleAppender進行追加。 – 2011-03-09 10:01:51

+0

我實際上解決了這個問題:調用進程沒有從輸出流中讀取,最終流是「完整的」。 – 2011-03-09 15:12:34

2

@ ralf.w。已經顯示了完整的症狀。我也可以改寫,因爲我最近也遇到同樣的問題。

  1. 開發使用ColoredConsoleAppender(或ConsoleAppender)打印出日誌的控制檯應用程序。
  2. 開發另一個應用程序(在我的情況下WinForms)來執行該控制檯(使用Process.Start)。 UseShellExecute = false以重定向標準輸出和錯誤。 CreateNoWindow = true。 WindowStyle =隱藏。

然後在少數機器(或遠程桌面會話)上,log4net將掛起控制檯應用程序,在掛起轉儲中,您可以看到它奇怪地等待寫入流完成。

難以在普通機器上重現(如我的),儘管log4net是開源的,但很難進一步調查。

解決方法可以如控制檯應用程序最小化(而不是隱藏)和/或更改其他ProcessStartInfo設置一樣簡單。

+1

我們看到類似的東西。我們確定log4net(和/或Windows)緩衝最多4KB的輸出到stdout/stderr。在該緩衝區填滿後,進一步的日誌調用將掛起。 因此,如果進程A啓動進程B,並將進程B日誌傳送到控制檯,並且進程A不從其啓動的進程讀取標準輸出(進程B),則進程B將在緩衝區填滿後掛起。 轉向重定向解決了這個問題。進行過程讀取標準輸出也可以解決問題。 – Jimothy 2012-10-04 22:56:48

+0

@Jimothy你爲我解決了問題;)Thx。 – nozzleman 2017-08-23 08:06:53