<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    === Debug ===
    這個(gè)級(jí)別最低的東東,一般的來(lái)說(shuō),在系統(tǒng)實(shí)際運(yùn)行過(guò)程中,一般都是不輸出的。

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

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

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

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

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

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

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

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

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

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

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

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

    === Debug ===
    這個(gè)級(jí)別最低的東東,一般的來(lái)說(shuō),在系統(tǒng)實(shí)際運(yùn)行過(guò)程中,一般都是不輸出的。

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

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

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

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

    === Debug ===
    這個(gè)級(jí)別最低的東東,一般的來(lái)說(shuō),在系統(tǒng)實(shí)際運(yùn)行過(guò)程中,一般都是不輸出的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    === Debug ===
    這個(gè)級(jí)別最低的東東,一般的來(lái)說(shuō),在系統(tǒng)實(shí)際運(yùn)行過(guò)程中,一般都是不輸出的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    === Debug ===
    這個(gè)級(jí)別最低的東東,一般的來(lái)說(shuō),在系統(tǒng)實(shí)際運(yùn)行過(guò)程中,一般都是不輸出的。

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

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

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

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

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

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

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

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

    === Debug ===
    這個(gè)級(jí)別最低的東東,一般的來(lái)說(shuō),在系統(tǒng)實(shí)際運(yùn)行過(guò)程中,一般都是不輸出的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    posted on 2010-01-25 10:10 鍵盤動(dòng)物 閱讀(11685) 評(píng)論(1)  編輯  收藏

    評(píng)論

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

    aaaa  回復(fù)  更多評(píng)論   


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


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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    新聞分類

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 少妇性饥渴无码A区免费| 中文字幕第一页亚洲| 亚洲Av无码乱码在线播放| 美女内射毛片在线看免费人动物 | 国产色无码精品视频免费| 亚洲GV天堂无码男同在线观看| 久久国产亚洲高清观看| 亚洲中文久久精品无码| 亚洲高清无码综合性爱视频| 免费视频淫片aa毛片| 国产香蕉九九久久精品免费| 精品无码人妻一区二区免费蜜桃| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲AV无码一区二区三区牲色| 久久亚洲精品专区蓝色区| 久久亚洲精品成人AV| 亚洲成AV人片在WWW色猫咪| 中文字幕亚洲一区| 国产亚洲情侣一区二区无| 亚洲AV无码一区二三区| 免费在线观看污网站| 国产一区二区三区在线免费| 日韩在线视频免费看| 天天操夜夜操免费视频| 女人张腿给男人桶视频免费版| 欧美三级在线电影免费| 无码一区二区三区AV免费| 国产免费不卡v片在线观看| 18禁网站免费无遮挡无码中文| 亚洲高清免费在线观看| 毛片免费全部播放无码| 免费视频爱爱太爽了| 国产精品视频免费| 免费无码精品黄AV电影| 毛片免费全部免费观看| 大学生美女毛片免费视频| 免费观看一级毛片| 亚洲精品成人片在线观看| 国产亚洲午夜高清国产拍精品| 亚洲精品无码午夜福利中文字幕| 亚洲精品无码mv在线观看网站|