日志級別的選擇:Debug、Info、Warn、Error還是Fatal?

          在此描述您的新便箋。軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志,不管用什么,這些東東大多是大同小異的,一般都提供了這樣5個日志級別:
              × Debug
              × Info
              × Warn
              × Error
              × Fatal
          一個等級比一個高,但是在具體開發(fā)中,關(guān)于應(yīng)該如何選擇適應(yīng)的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日后使用吧。

          === Debug ===
          這個級別最低的東東,一般的來說,在系統(tǒng)實際運行過程中,一般都是不輸出的。

          因此這個級別的信息,可以隨意的使用,任何覺得有利于在調(diào)試時更詳細(xì)的了解系統(tǒng)運行狀態(tài)的東東,比如變量的值等等,都輸出來看看也無妨。

          當(dāng)然,在每一個 Debug 調(diào)用之前,一定要加上 If 判斷。

          === Info ===
          這個應(yīng)該用來反饋系統(tǒng)的當(dāng)前狀態(tài)給最終用戶的,所以,在這里輸出的信息,應(yīng)該對最終用戶具有實際意義,也就是最終用戶要能夠看得明白是什么意思才行。

          從某種角度上說,Info 輸出的信息可以看作是軟件產(chǎn)品的一部分(就像那些交互界面上的文字一樣),所以需要謹(jǐn)慎對待,不可隨便。

          === Warn、Error、Fatal ===
          警告、錯誤、嚴(yán)重錯誤,這三者應(yīng)該都在系統(tǒng)運行時檢測到了一個不正常的狀態(tài),他們之間的區(qū)別,要區(qū)分還真不是那么簡單的事情。我大致是這樣區(qū)分的:

          所謂警告,應(yīng)該是這個時候進行一些修復(fù)性的工作,應(yīng)該還可以把系統(tǒng)恢復(fù)到正常狀態(tài)中來,系統(tǒng)應(yīng)該可以繼續(xù)運行下去。

          所謂錯誤,就是說可以進行一些修復(fù)性的工作,但無法確定系統(tǒng)會正常的工作下去,系統(tǒng)在以后的某個階段,很可能會因為當(dāng)前的這個問題,導(dǎo)致一個無法修復(fù)的錯誤(例如宕機),但也可能一直工作到停止也不出現(xiàn)嚴(yán)重問題。

          所謂Fatal,那就是相當(dāng)嚴(yán)重的了,可以肯定這種錯誤已經(jīng)無法修復(fù),并且如果系統(tǒng)繼續(xù)運行下去的話,可以肯定必然會越來越亂。這時候采取的最好的措施不是試圖將系統(tǒng)狀態(tài)恢復(fù)到正常,而是盡可能地保留系統(tǒng)有效數(shù)據(jù)并停止運行。

          也就是說,選擇 Warn、Error、Fatal 中的具體哪一個,是根據(jù)當(dāng)前的這個問題對以后可能產(chǎn)生的影響而定的,如果對以后基本沒什么影響,則警告之,如果肯定是以后要出嚴(yán)重問題的了,則Fatal之,拿不準(zhǔn)會怎么樣,則 Error 之。

          === 一些疑惑 ===
          不過在實際使用中,基于上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產(chǎn)品中將輸出日志打開到那種級別才算好呢?

          例如在應(yīng)用中有一個輸出窗口,一些系統(tǒng)狀態(tài)信息將被輸出到這個輸出窗口中。因為 Info 的級別是如此之低,所以為了讓用戶能夠看到有效的輸出信息,必須將日志級別開放到 Info 級別。但是 Warn 的級別比 Info 要高,所以用戶不得不被迫看到一些 Warn 的信息。而我們其實已經(jīng)假定,Warn 信息其實并不影響系統(tǒng)的正常運行,這一般只代表系統(tǒng)中存在一些還沒有被發(fā)現(xiàn)或者修改的小 Bug。這些 Warn 信息會讓最終用戶困惑甚至恐慌,系統(tǒng)發(fā)出警告了,該怎么辦?

          個人觀點,Info 的級別應(yīng)該比 Warn 更高才對,Warn 信息和 Debug 一樣,應(yīng)該在產(chǎn)品測試和調(diào)試時使用,而 Info、Erro 以及 Fatal 則在產(chǎn)品發(fā)布后需要繼續(xù)使用。
          軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志,不管用什么,這些東東大多是大同小異的,一般都提供了這樣5個日志級別:
              × Debug
              × Info
              × Warn
              × Error
              × Fatal
          一個等級比一個高,但是在具體開發(fā)中,關(guān)于應(yīng)該如何選擇適應(yīng)的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日后使用吧。

          === Debug ===
          這個級別最低的東東,一般的來說,在系統(tǒng)實際運行過程中,一般都是不輸出的。

          因此這個級別的信息,可以隨意的使用,任何覺得有利于在調(diào)試時更詳細(xì)的了解系統(tǒng)運行狀態(tài)的東東,比如變量的值等等,都輸出來看看也無妨。

          當(dāng)然,在每一個 Debug 調(diào)用之前,一定要加上 If 判斷。

          === Info ===
          這個應(yīng)該用來反饋系統(tǒng)的當(dāng)前狀態(tài)給最終用戶的,所以,在這里輸出的信息,應(yīng)該對最終用戶具有實際意義,也就是最終用戶要能夠看得明白是什么意思才行。

          從某種角度上說,Info 輸出的信息可以看作是軟件產(chǎn)品的一部分(就像那些交互界面上的文字一樣),所以需要謹(jǐn)慎對待,不可隨便。
          軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志,不管用什么,這些東東大多是大同小異的,一般都提供了這樣5個日志級別:
              × Debug
              × Info
              × Warn
              × Error
              × Fatal
          一個等級比一個高,但是在具體開發(fā)中,關(guān)于應(yīng)該如何選擇適應(yīng)的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日后使用吧。

          === Debug ===
          這個級別最低的東東,一般的來說,在系統(tǒng)實際運行過程中,一般都是不輸出的。

          因此這個級別的信息,可以隨意的使用,任何覺得有利于在調(diào)試時更詳細(xì)的了解系統(tǒng)運行狀態(tài)的東東,比如變量的值等等,都輸出來看看也無妨。

          當(dāng)然,在每一個 Debug 調(diào)用之前,一定要加上 If 判斷。

          === Info ===
          這個應(yīng)該用來反饋系統(tǒng)的當(dāng)前狀態(tài)給最終用戶的,所以,在這里輸出的信息,應(yīng)該對最終用戶具有實際意義,也就是最終用戶要能夠看得明白是什么意思才行。

          從某種角度上說,Info 輸出的信息可以看作是軟件產(chǎn)品的一部分(就像那些交互界面上的文字一樣),所以需要謹(jǐn)慎對待,不可隨便。

          === Warn、Error、Fatal ===
          警告、錯誤、嚴(yán)重錯誤,這三者應(yīng)該都在系統(tǒng)運行時檢測到了一個不正常的狀態(tài),他們之間的區(qū)別,要區(qū)分還真不是那么簡單的事情。我大致是這樣區(qū)分的:

          所謂警告,應(yīng)該是這個時候進行一些修復(fù)性的工作,應(yīng)該還可以把系統(tǒng)恢復(fù)到正常狀態(tài)中來,系統(tǒng)應(yīng)該可以繼續(xù)運行下去。

          所謂錯誤,就是說可以進行一些修復(fù)性的工作,但無法確定系統(tǒng)會正常的工作下去,系統(tǒng)在以后的某個階段,很可能會因為當(dāng)前的這個問題,導(dǎo)致一個無法修復(fù)的錯誤(例如宕機),但也可能一直工作到停止也不出現(xiàn)嚴(yán)重問題。

          所謂Fatal,那就是相當(dāng)嚴(yán)重的了,可以肯定這種錯誤已經(jīng)無法修復(fù),并且如果系統(tǒng)繼續(xù)運行下去的話,可以肯定必然會越來越亂。這時候采取的最好的措施不是試圖將系統(tǒng)狀態(tài)恢復(fù)到正常,而是盡可能地保留系統(tǒng)有效數(shù)據(jù)并停止運行。

          也就是說,選擇 Warn、Error、Fatal 中的具體哪一個,是根據(jù)當(dāng)前的這個問題對以后可能產(chǎn)生的影響而定的,如果對以后基本沒什么影響,則警告之,如果肯定是以后要出嚴(yán)重問題的了,則Fatal之,拿不準(zhǔn)會怎么樣,則 Error 之。

          === 一些疑惑 ===
          不過在實際使用中,基于上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產(chǎn)品中將輸出日志打開到那種級別才算好呢?

          例如在應(yīng)用中有一個輸出窗口,一些系統(tǒng)狀態(tài)信息將被輸出到這個輸出窗口中。因為 Info 的級別是如此之低,所以為了讓用戶能夠看到有效的輸出信息,必須將日志級別開放到 Info 級別。但是 Warn 的級別比 Info 要高,所以用戶不得不被迫看到一些 Warn 的信息。而我們其實已經(jīng)假定,Warn 信息其實并不影響系統(tǒng)的正常運行,這一般只代表系統(tǒng)中存在一些還沒有被發(fā)現(xiàn)或者修改的小 Bug。這些 Warn 信息會讓最終用戶困惑甚至恐慌,系統(tǒng)發(fā)出警告了,該怎么辦?

          個人觀點,Info 的級別應(yīng)該比 Warn 更高才對,Warn 信息和 Debug 一樣,應(yīng)該在產(chǎn)品測試和調(diào)試時使用,而 Info、Erro 以及 Fatal 則在產(chǎn)品發(fā)布后需要繼續(xù)使用。

          目前我所采用的解決方法是,對于 Warn、Error、Fatal 都添加一個相應(yīng)的系統(tǒng)斷言,這樣,可以保證當(dāng)發(fā)生這種問題時,在調(diào)試階段,可以立即得到提示。在軟件發(fā)布以后,這些信息也能被記錄到日志文件中去。
          {{{
          log.Warn("message");
          System.Diagnostics.Debug.Fail("警告", "message");
          }}}
          Debug.Fail 將導(dǎo)致編譯為 Debug 輸出時,會彈出一個消息警告窗口,這可保證在測試、調(diào)試階段不漏過任何一個潛在的錯誤。而在發(fā)布時,Release 編譯的輸出不會包括 Debug 語句,這就不會打擾最終用戶,而錯誤信息仍然能通過 log 記錄到日志中
          === Warn、Error、Fatal ===
          警告、錯誤、嚴(yán)重錯誤,這三者應(yīng)該都在系統(tǒng)運行時檢測到了一個不正常的狀態(tài),他們之間的區(qū)別,要區(qū)分還真不是那么簡單的事情。我大致是這樣區(qū)分的:

          所謂警告,應(yīng)該是這個時候進行一些修復(fù)性的工作,應(yīng)該還可以把系統(tǒng)恢復(fù)到正常狀態(tài)中來,系統(tǒng)應(yīng)該可以繼續(xù)運行下去。

          所謂錯誤,就是說可以進行一些修復(fù)性的工作,但無法確定系統(tǒng)會正常的工作下去,系統(tǒng)在以后的某個階段,很可能會因為當(dāng)前的這個問題,導(dǎo)致一個無法修復(fù)的錯誤(例如宕機),但也可能一直工作到停止也不出現(xiàn)嚴(yán)重問題。

          所謂Fatal,那就是相當(dāng)嚴(yán)重的了,可以肯定這種錯誤已經(jīng)無法修復(fù),并且如果系統(tǒng)繼續(xù)運行下去的話,可以肯定必然會越來越亂。這時候采取的最好的措施不是試圖將系統(tǒng)狀態(tài)恢復(fù)到正常,而是盡可能地保留系統(tǒng)有效數(shù)據(jù)并停止運行。

          也就是說,選擇 Warn、Error、Fatal 中的具體哪一個,是根據(jù)當(dāng)前的這個問題對以后可能產(chǎn)生的影響而定的,如果對以后基本沒什么影響,則警告之,如果肯定是以后要出嚴(yán)重問題的了,則Fatal之,拿不準(zhǔn)會怎么樣,則 Error 之。

          === 一些疑惑 ===
          不過在實際使用中,基于上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產(chǎn)品中將輸出日志打開到那種級別才算好呢?

          例如在應(yīng)用中有一個輸出窗口,一些系統(tǒng)狀態(tài)信息將被輸出到這個輸出窗口中。因為 Info 的級別是如此之低,所以為了讓用戶能夠看到有效的輸出信息,必須將日志級別開放到 Info 級別。但是 Warn 的級別比 Info 要高,所以用戶不得不被迫看到一些 Warn 的信息。而我們其實已經(jīng)假定,Warn 信息其實并不影響系統(tǒng)的正常運行,這一般只代表系統(tǒng)中存在一些還沒有被發(fā)現(xiàn)或者修改的小 Bug。這些 Warn 信息會讓最終用戶困惑甚至恐慌,系統(tǒng)發(fā)出警告了,該怎么辦?
          軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志,不管用什么,這些東東大多是大同小異的,一般都提供了這樣5個日志級別:
              × Debug
              × Info
              × Warn
              × Error
              × Fatal
          一個等級比一個高,但是在具體開發(fā)中,關(guān)于應(yīng)該如何選擇適應(yīng)的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日后使用吧。

          === Debug ===
          這個級別最低的東東,一般的來說,在系統(tǒng)實際運行過程中,一般都是不輸出的。

          因此這個級別的信息,可以隨意的使用,任何覺得有利于在調(diào)試時更詳細(xì)的了解系統(tǒng)運行狀態(tài)的東東,比如變量的值等等,都輸出來看看也無妨。

          當(dāng)然,在每一個 Debug 調(diào)用之前,一定要加上 If 判斷。

          === Info ===
          這個應(yīng)該用來反饋系統(tǒng)的當(dāng)前狀態(tài)給最終用戶的,所以,在這里輸出的信息,應(yīng)該對最終用戶具有實際意義,也就是最終用戶要能夠看得明白是什么意思才行。

          從某種角度上說,Info 輸出的信息可以看作是軟件產(chǎn)品的一部分(就像那些交互界面上的文字一樣),所以需要謹(jǐn)慎對待,不可隨便。

          === Warn、Error、Fatal ===
          警告、錯誤、嚴(yán)重錯誤,這三者應(yīng)該都在系統(tǒng)運行時檢測到了一個不正常的狀態(tài),他們之間的區(qū)別,要區(qū)分還真不是那么簡單的事情。我大致是這樣區(qū)分的:

          所謂警告,應(yīng)該是這個時候進行一些修復(fù)性的工作,應(yīng)該還可以把系統(tǒng)恢復(fù)到正常狀態(tài)中來,系統(tǒng)應(yīng)該可以繼續(xù)運行下去。

          所謂錯誤,就是說可以進行一些修復(fù)性的工作,但無法確定系統(tǒng)會正常的工作下去,系統(tǒng)在以后的某個階段,很可能會因為當(dāng)前的這個問題,導(dǎo)致一個無法修復(fù)的錯誤(例如宕機),但也可能一直工作到停止也不出現(xiàn)嚴(yán)重問題。

          所謂Fatal,那就是相當(dāng)嚴(yán)重的了,可以肯定這種錯誤已經(jīng)無法修復(fù),并且如果系統(tǒng)繼續(xù)運行下去的話,可以肯定必然會越來越亂。這時候采取的最好的措施不是試圖將系統(tǒng)狀態(tài)恢復(fù)到正常,而是盡可能地保留系統(tǒng)有效數(shù)據(jù)并停止運行。

          也就是說,選擇 Warn、Error、Fatal 中的具體哪一個,是根據(jù)當(dāng)前的這個問題對以后可能產(chǎn)生的影響而定的,如果對以后基本沒什么影響,則警告之,如果肯定是以后要出嚴(yán)重問題的了,則Fatal之,拿不準(zhǔn)會怎么樣,則 Error 之。

          === 一些疑惑 ===
          不過在實際使用中,基于上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產(chǎn)品中將輸出日志打開到那種級別才算好呢?

          例如在應(yīng)用中有一個輸出窗口,一些系統(tǒng)狀態(tài)信息將被輸出到這個輸出窗口中。因為 Info 的級別是如此之低,所以為了讓用戶能夠看到有效的輸出信息,必須將日志級別開放到 Info 級別。但是 Warn 的級別比 Info 要高,所以用戶不得不被迫看到一些 Warn 的信息。而我們其實已經(jīng)假定,Warn 信息其實并不影響系統(tǒng)的正常運行,這一般只代表系統(tǒng)中存在一些還沒有被發(fā)現(xiàn)或者修改的小 Bug。這些 Warn 信息會讓最終用戶困惑甚至恐慌,系統(tǒng)發(fā)出警告了,該怎么辦?

          個人觀點,Info 的級別應(yīng)該比 Warn 更高才對,Warn 信息和 Debug 一樣,應(yīng)該在產(chǎn)品測試和調(diào)試時使用,而 Info、Erro 以及 Fatal 則在產(chǎn)品發(fā)布后需要繼續(xù)使用。

          目前我所采用的解決方法是,對于 Warn、Error、Fatal 都添加一個相應(yīng)的系統(tǒng)斷言,這樣,可以保證當(dāng)發(fā)生這種問題時,在調(diào)試階段,可以立即得到提示。在軟件發(fā)布以后,這些信息也能被記錄到日志文件中去。
          {{{
          log.Warn("message");
          System.Diagnostics.Debug.Fail("警告", "message");
          }}}
          Debug.Fail 將導(dǎo)致編譯為 Debug 輸出時,會彈出一個消息警告窗口,這可保證在測試、調(diào)試階段不漏過任何一個潛在的錯誤。而在發(fā)布時,Release 編譯的輸出不會包括 Debug 語句,這就不會打擾最終用戶,而錯誤信息仍然能通過 log 記錄到日志中
          個人觀點,Info 的級別應(yīng)該比 Warn 更高才對,Warn 信息和 Debug 一樣,應(yīng)該在產(chǎn)品測試和調(diào)試時使用,而 Info、Erro 以及 Fatal 則在產(chǎn)品發(fā)布后需要繼續(xù)使用。

          目前我所采用的解決方法是,對于 Warn、Error、Fatal 都添加一個相應(yīng)的系統(tǒng)斷言,這樣,可以保證當(dāng)發(fā)生這種問題時,在調(diào)試階段,可以立即得到提示。在軟件發(fā)布以后,這些信息也能被記錄到日志文件中去。
          {{{
          log.Warn("message");
          System.Diagnostics.Debug.Fail("警告", "message");
          }}}
          Debug.Fail 將導(dǎo)致編譯為 Debug 輸出時,會彈出一個消息警告窗口,這可保證在測試、調(diào)試階段不漏過任何一個潛在的軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志,不管用什么,這些東東大多是大同小異的,一般都提供了這樣5個日志級別:
              × Debug
              × Info
              × Warn
              × Error
              × Fatal
          一個等級比一個高,但是在具體開發(fā)中,關(guān)于應(yīng)該如何選擇適應(yīng)的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日后使用吧。

          === Debug ===
          這個級別最低的東東,一般的來說,在系統(tǒng)實際運行過程中,一般都是不輸出的。

          因此這個級別的信息,可以隨意的使用,任何覺得有利于在調(diào)試時更詳細(xì)的了解系統(tǒng)運行狀態(tài)的東東,比如變量的值等等,都輸出來看看也無妨。

          當(dāng)然,在每一個 Debug 調(diào)用之前,一定要加上 If 判斷。

          === Info ===
          這個應(yīng)該用來反饋系統(tǒng)的當(dāng)前狀態(tài)給最終用戶的,所以,在這里輸出的信息,應(yīng)該對最終用戶具有實際意義,也就是最終用戶要能夠看得明白是什么意思才行。

          從某種角度上說,Info 輸出的信息可以看作是軟件產(chǎn)品的一部分(就像那些交互界面上的文字一樣),所以需要謹(jǐn)慎對待,不可隨便。

          === Warn、Error、Fatal ===
          警告、錯誤、嚴(yán)重錯誤,這三者應(yīng)該都在系統(tǒng)運行時檢測到了一個不正常的狀態(tài),他們之間的區(qū)別,要區(qū)分還真不是那么簡單的事情。我大致是這樣區(qū)分的:

          所謂警告,應(yīng)該是這個時候進行一些修復(fù)性的工作,應(yīng)該還可以把系統(tǒng)恢復(fù)到正常狀態(tài)中來,系統(tǒng)應(yīng)該可以繼續(xù)運行下去。

          所謂錯誤,就是說可以進行一些修復(fù)性的工作,但無法確定系統(tǒng)會正常的工作下去,系統(tǒng)在以后的某個階段,很可能會因為當(dāng)前的這個問題,導(dǎo)致一個無法修復(fù)的錯誤(例如宕機),但也可能一直工作到停止也不出現(xiàn)嚴(yán)重問題。

          所謂Fatal,那就是相當(dāng)嚴(yán)重的了,可以肯定這種錯誤已經(jīng)無法修復(fù),并且如果系統(tǒng)繼續(xù)運行下去的話,可以肯定必然會越來越亂。這時候采取的最好的措施不是試圖將系統(tǒng)狀態(tài)恢復(fù)到正常,而是盡可能地保留系統(tǒng)有效數(shù)據(jù)并停止運行。
          軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志,不管用什么,這些東東大多是大同小異的,一般都提供了這樣5個日志級別:
              × Debug
              × Info
              × Warn
              × Error
              × Fatal
          一個等級比一個高,但是在具體開發(fā)中,關(guān)于應(yīng)該如何選擇適應(yīng)的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日后使用吧。

          === Debug ===
          這個級別最低的東東,一般的來說,在系統(tǒng)實際運行過程中,一般都是不輸出的。

          因此這個級別的信息,可以隨意的使用,任何覺得有利于在調(diào)試時更詳細(xì)的了解系統(tǒng)運行狀態(tài)的東東,比如變量的值等等,都輸出來看看也無妨。

          當(dāng)然,在每一個 Debug 調(diào)用之前,一定要加上 If 判斷。

          === Info ===
          這個應(yīng)該用來反饋系統(tǒng)的當(dāng)前狀態(tài)給最終用戶的,所以,在這里輸出的信息,應(yīng)該對最終用戶具有實際意義,也就是最終用戶要能夠看得明白是什么意思才行。

          從某種角度上說,Info 輸出的信息可以看作是軟件產(chǎn)品的一部分(就像那些交互界面上的文字一樣),所以需要謹(jǐn)慎對待,不可隨便。

          === Warn、Error、Fatal ===
          警告、錯誤、嚴(yán)重錯誤,這三者應(yīng)該都在系統(tǒng)運行時檢測到了一個不正常的狀態(tài),他們之間的區(qū)別,要區(qū)分還真不是那么簡單的事情。我大致是這樣區(qū)分的:

          所謂警告,應(yīng)該是這個時候進行一些修復(fù)性的工作,應(yīng)該還可以把系統(tǒng)恢復(fù)到正常狀態(tài)中來,系統(tǒng)應(yīng)該可以繼續(xù)運行下去。

          所謂錯誤,就是說可以進行一些修復(fù)性的工作,但無法確定系統(tǒng)會正常的工作下去,系統(tǒng)在以后的某個階段,很可能會因為當(dāng)前的這個問題,導(dǎo)致一個無法修復(fù)的錯誤(例如宕機),但也可能一直工作到停止也不出現(xiàn)嚴(yán)重問題。

          所謂Fatal,那就是相當(dāng)嚴(yán)重的了,可以肯定這種錯誤已經(jīng)無法修復(fù),并且如果系統(tǒng)繼續(xù)運行下去的話,可以肯定必然會越來越亂。這時候采取的最好的措施不是試圖將系統(tǒng)狀態(tài)恢復(fù)到正常,而是http://www.cnblogs.com/shwen99/rss盡可能地保留系統(tǒng)有效數(shù)據(jù)并停止運行。

          也就是說,選擇 Warn、Error、Fatal 中的具體哪一個,是根據(jù)當(dāng)前的這個問題對以后可能產(chǎn)生的影響而定的,如果對以后基本沒什么影響,則警告之,如果肯定是以后要出嚴(yán)重問題的了,則Fatal之,拿不準(zhǔn)會怎么樣,則 Error 之。

          === 一些疑惑 ===
          不過在實際使用中,基于上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產(chǎn)品中將輸出日志打開到那種級別才算好呢?

          例如在應(yīng)用中有一個輸出窗口,一些系統(tǒng)狀態(tài)信息將被輸出到這個輸出窗口中。因為 Info 的級別是如此之低,所以為了讓用戶能夠看到有效的輸出信息,必須將日志級別開放到 Info 級別。但是 Warn 的級別比 Info 要高,所以用戶不得不被迫看到一些 Warn 的信息。而我們其實已經(jīng)假定,Warn 信息其實并不影響系統(tǒng)的正常運行,這一般只代表系統(tǒng)中存在一些還沒有被發(fā)現(xiàn)或者修改的小 Bug。這些 Warn 信息會讓最終用戶困惑甚至恐慌,系統(tǒng)發(fā)出警告了,該怎么辦?

          個人觀點,Info 的級別應(yīng)該比 Warn 更高才對,Warn 信息和 Debug 一樣,應(yīng)該在產(chǎn)品測試和調(diào)試時使用,而 Info、Erro 以及 Fatal 則在產(chǎn)品發(fā)布后需要繼續(xù)使用。

          目前我所采用的解決方法是,對于 Warn、Error、Fatal 都添加一個相應(yīng)的系統(tǒng)斷言,這樣,可以保證當(dāng)發(fā)生這種問題時,在調(diào)試階段,可以立即得到提示。在軟件發(fā)布以后,這些信息也能被記錄到日志文件中去。
          {{{
          log.Warn("message");
          System.Diagnostics.Debug.Fail("警告", "message");
          }}}
          Debug.Fail 將導(dǎo)致編譯為 Debug 輸出時,會彈出一個消息警告窗口,這可保證在測試、調(diào)試階段不漏過任何一個潛在的錯誤。而在發(fā)布時,Release 編譯的輸出不會包括 Debug 語句,這就不會打擾最終用戶,而錯誤信息仍然能通過 log 記錄到日志中
          也就是說,選擇 Warn、Error、Fatal 中的具體哪一個,是根據(jù)當(dāng)前的這個問題對以后可能產(chǎn)生的影響而定的,如果對以后基本沒什么影響,則警告之,如果肯定是以后要出嚴(yán)重問題的了,則Fatal之,拿不準(zhǔn)會怎么樣,則 Error 之。

          === 一些疑惑 ===
          不過在實際使用中,基于上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產(chǎn)品中將輸出日志打開到那種級別才算好呢?

          例如在應(yīng)用中有一個輸出窗口,一些系統(tǒng)狀態(tài)信息將被輸出到這個輸出窗口中。因為 Info 的級別是如此之低,所以為了讓用戶能夠看到有效的輸出信息,必須將日志級別開放到 Info 級別。但是 Warn 的級別比 Info 要高,所以用戶不得不被迫看到一些 Warn 的信息。而我們其實已經(jīng)假定,Warn 信息其實并不影響系統(tǒng)的正常運行,這一般只代表系統(tǒng)中存在一些還沒有被發(fā)現(xiàn)或者修改的小 Bug。這些 Warn 信息會讓最終用戶困惑甚至恐慌,系統(tǒng)發(fā)出警告了,該怎么辦?

          個人觀點,Info 的級別應(yīng)該比 Warn 更高才對,Warn 信息和 Debug 一樣,應(yīng)該在產(chǎn)品測試和調(diào)試時使用,而 Info、Erro 以及 Fatal 則在產(chǎn)品發(fā)布后需要繼續(xù)使用。

          目前我所采用的解決方法是,對于 Warn、Error、Fatal 都添加一個相應(yīng)的系統(tǒng)斷言,這樣,可以保證當(dāng)發(fā)生這種問題時,在調(diào)試階段,可以立即得到提示。在軟件發(fā)布以后,這些信息也能被記錄到日志文件中去。
          {{{
          log.Warn("message");
          System.Diagnostics.Debug.Fail("警告", "message");
          }}}
          Debug.Fail 將導(dǎo)致編譯為 Debug 輸出時,會彈出一個消息警告窗口,這可保證在測試、調(diào)試階段不漏過任何一個潛在的錯誤。而在發(fā)布時,Release 編譯的輸出不會包括 Debug 語句,這就不會打擾最終用戶,而錯誤信息仍然能通過 log 記錄到日志中錯誤。而在發(fā)布時,Release 編譯的輸出不會包括 Debug 語句,這就不會打擾最終用戶,而錯誤信息仍然能通過 log 記錄到日志中
          目前我所采用的解決方法是,對于 Warn、Error、Fatal 都添加一個相應(yīng)的系統(tǒng)斷言,這樣,可以保證當(dāng)發(fā)生這種問題時,在調(diào)試階段,可以立即得到提示。在軟件發(fā)布以后,這些信息也能被記錄到日志文件中去。
          {{{
          log.Warn("message");
          System.Diagnostics.Debug.Fail("警告", "message");
          }}}
          Debug.Fail 將導(dǎo)致編譯為 Debug 輸出時,會彈出一個消息警告窗口,這可保證在測試、調(diào)試階段不漏過任何一個潛在的錯誤。而在發(fā)布時,Release 編譯的輸出不會包括 Debug 語句,這就不會打擾最終用戶,而錯誤信息仍然能通過 log 記錄到日志中

          posted on 2010-01-25 10:10 鍵盤動物 閱讀(11697) 評論(1)  編輯  收藏

          評論

          # re: 日志級別的選擇:Debug、Info、Warn、Error還是Fatal? 2016-05-25 17:05 ww

          aaaa  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2016年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          新聞分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乐亭县| 诸城市| 平顶山市| 武冈市| 定南县| 巴南区| 枣阳市| 甘孜县| 桐庐县| 扶绥县| 松潘县| 黑水县| 内江市| 邻水| 峨眉山市| 嵩明县| 潢川县| 荔浦县| 黑龙江省| 木兰县| 庄浪县| 当阳市| 神池县| 甘谷县| 莲花县| 青海省| 酒泉市| 宜黄县| 神池县| 汝城县| 银川市| 孝感市| 永胜县| 体育| 潜山县| 旺苍县| 左云县| 淅川县| 崇仁县| 惠安县| 临安市|