2011-01-12 13 views
11

說我有一個多行文本「a \ nb \ nc」;當我登錄時,例如使用「調試」方法,我只能得到一個日誌;顯示多行文本的每行日誌

這是預期的行爲但隨後的線不包括所述第一顯示太上在輸出左:

1234 [1] [DEBUG] Test - a 
b 
c 
1235 [1] [DEBUG] Test - ... 

一個簡單的解決辦法是,生成每行一個日誌取得:

1234 [1] [DEBUG] Test - a 
1235 [1] [DEBUG] Test - b 
1236 [1] [DEBUG] Test - c 
1237 [1] [DEBUG] Test - ... 

_

是否有具有這種自動處理或者我應該寫一個簡單的包裝來管理此的任何方式 設置 ?

_

在此先感謝。

+1

我不認爲這是可能的。如果你寫了一個包裝器 - 包裝器將在`\ n`上分割並且調用`logger.log`的次數與行數一樣多。不好我會說。 – Nishant 2011-01-12 14:03:09

+0

@Nishant:謝謝你考慮這個問題。包裝可以是一個自定義的appender,可以從我當前的appender類型繼承,或者更好的是可以包裝任何appender的通用裝飾器。然後我想知道如何在XML配置文件中表達這種結構。 – Pragmateek 2011-01-12 14:25:45

回答

8

不可能,不推薦。

在第一個例子中,很明顯存在兩個日誌語句,而在第二個例子中,人們可能一眼就看出其中有四個日誌語句。

一個日誌語句應該提供關於發生了什麼以及發生了什麼的單一源信息,並且該信息應該以某種方式有用。

想象一下,如果您有一條錯誤語句(例如異常),由於其堆棧跟蹤而會跨越30行左右。在你的情況下,這看起來像30個錯誤,而一個自動化工具也可能會將它報告爲30個錯誤。這是錯誤的信息,應該避免。

更不用說當您處理更復雜的日誌記錄情況時,「多個線程同時寫入同一個文件,或者更糟糕的情況是多個JVM」時,「一個日誌語句!=一個寫入日誌」可能會導致同步破壞這樣做。

如果「左邊太遠」的東西給了你很大的悲傷,我建議在生成的日誌文件上進行一些後期處理,比如在每行的開始處添加8個左右的空格包含[DEBUG],[INFO],...