成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Yii 的修行之路 - Errors(錯誤處理) & Logging(日志記錄)

_ang / 1875人閱讀

摘要:簡述這里簡單歸納總結(jié)關(guān)于的錯誤處理和日志記錄的操作。錯誤處理器會正確地設(shè)置響應(yīng)的狀態(tài)碼并使用合適的錯誤視圖頁面來顯示錯誤信息。記錄一個警告消息用來指示一些已經(jīng)發(fā)生的意外。的義務(wù)是正確處理日志消息。相應(yīng)的消息通過被記錄。

簡述

這里簡單歸納總結(jié)關(guān)于Yii的錯誤處理和日志記錄的操作。

錯誤處理(Errors)

Yii 內(nèi)置了一個yiiwebErrorHandler錯誤處理器,它使錯誤處理更方便, Yii錯誤處理器做以下工作來提升錯誤處理效果:

所有非致命PHP錯誤(如,警告,提示)會轉(zhuǎn)換成可獲取異常;

異常和致命的PHP錯誤會被顯示,在調(diào)試模式會顯示詳細(xì)的函數(shù)調(diào)用棧和源代碼行數(shù)。

支持使用專用的 控制器操作 來顯示錯誤;

支持不同的錯誤響應(yīng)格式;

yiiwebErrorHandler 錯誤處理器默認(rèn)啟用, 可通過在應(yīng)用的入口腳本中定義常量YII_ENABLE_ERROR_HANDLER來禁用。

使用錯誤處理器

yiiwebErrorHandler 注冊成一個名稱為errorHandler應(yīng)用組件, 可以在應(yīng)用配置中配置它類似如下:

return [ 
    "components" => [ 
        "errorHandler" => [ 
            "maxSourceLines" => 20, 
         ], 
     ], 
];

使用如上代碼,異常頁面最多顯示20條源代碼。

如前所述,錯誤處理器將所有非致命PHP錯誤轉(zhuǎn)換成可獲取異常,也就是說可以使用如下代碼處理PHP錯誤:

use Yii; use yiiaseErrorException; 
try { 
    10/0; 
} catch (ErrorException $e) { 
    Yii::warning("Division by zero."); 
} // execution continues...

如果你想顯示一個錯誤頁面告訴用戶請求是無效的或無法處理的,可簡單地拋出一個 yiiwebHttpException異常, 如 yiiwebNotFoundHttpException。錯誤處理器會正確地設(shè)置響應(yīng)的HTTP狀態(tài)碼并使用合適的錯誤視圖頁面來顯示錯誤信息。

use yiiwebNotFoundHttpException;

throw new NotFoundHttpException();

當(dāng)錯誤處理器 捕獲到一個異常,會從異常中提取狀態(tài)碼并賦值到響應(yīng)

那么 yiiwebNotFoundHttpException 對應(yīng)HTTP 404狀態(tài)碼,以下為Yii預(yù)定義的HTTP異常:

yiiwebBadRequestHttpException: status code 400.

yiiwebConflictHttpException: status code 409.

yiiwebForbiddenHttpException: status code 403.

yiiwebGoneHttpException: status code 410.

yiiwebMethodNotAllowedHttpException: status code 405.

yiiwebNotAcceptableHttpException: status code 406.

yiiwebNotFoundHttpException: status code 404.

yiiwebServerErrorHttpException: status code 500.

yiiwebTooManyRequestsHttpException: status code 429.

yiiwebUnauthorizedHttpException: status code 401.

yiiwebUnsupportedMediaTypeHttpException: status code 415.

如果想拋出的異常不在如上列表中,可創(chuàng)建一個yiiwebHttpException異常,帶上狀態(tài)碼拋出,如下:

throw new yiiwebHttpException(402);
日志(Logging)

Yii提供了一個強(qiáng)大的日志框架,這個框架具有高度的可定制性和可擴(kuò)展性。使用這個框架,你可以輕松地記錄各種類型的消息,過濾它們, 并且將它們收集到不同的目標(biāo),諸如文件,數(shù)據(jù)庫,郵件。
使用Yii日志框架涉及下面的幾個步驟:

在你代碼里的各個地方記錄 log messages;

在應(yīng)用配置里通過配置 log targets 來過濾和導(dǎo)出日志消息;

檢查由不同的目標(biāo)導(dǎo)出的已過濾的日志消息(例如:Yii debugger)。

日志消息

記錄日志消息就跟調(diào)用下面的日志方法一樣簡單:

Yii::trace():記錄一條消息去跟蹤一段代碼是怎樣運(yùn)行的。這主要在開發(fā)的時候使用。

Yii::info():記錄一條消息來傳達(dá)一些有用的信息。

Yii::warning():記錄一個警告消息用來指示一些已經(jīng)發(fā)生的意外。

Yii::error():記錄一個致命的錯誤,這個錯誤應(yīng)該盡快被檢查。

信息:日志消息可以是字符串,也可以是復(fù)雜的數(shù)據(jù),諸如數(shù)組或者對象。log targets 的義務(wù)是正確處理日志消息。 默認(rèn)情況下,假如一條日志消息不是一個字符串,它將被導(dǎo)出為一個字符串,通過調(diào)用:

yiihelpersVarDumper::export()

為了更好地組織和過濾日志消息,我們建議您為每個日志消息指定一個適當(dāng)?shù)念悇e。 您可以為類別選擇一個分層命名方案,這將使得log targets 在基于它們的分類來過濾消息變得更加容易。 一個簡單而高效的命名方案是使用PHP魔術(shù)常量 METHOD 作為分類名稱。這種方式也在Yii框架的核心代碼中得到應(yīng)用, 例如:

Yii::trace("start calculating average revenue", __METHOD__);

METHOD 常量計(jì)算值作為該常量出現(xiàn)的地方的方法名(完全限定的類名前綴)。

例如,假如上面那行代碼在這個方法內(nèi)被調(diào)用,則它將等于字符串 "appcontrollersRevenueController::calculate"。

日志目標(biāo)

一個日志目標(biāo)是一個 yiilogTarget 類或者它的子類的實(shí)例。它將通過他們的嚴(yán)重層級和類別來過濾日志消息,然后將它們導(dǎo)出到一些媒介中。

例如,一個 yiilogDbTarget 目標(biāo)導(dǎo)出已經(jīng)過濾的日志消息到一個數(shù)據(jù)的表里面,而一個 yiilogEmailTarget 目標(biāo)將日志消息導(dǎo)出到指定的郵箱地址里。

消息過濾對于每一個日志目標(biāo),你可以配置它的 levels 和 categories 屬性來指定哪個消息的嚴(yán)重程度和分類目標(biāo)應(yīng)該處理。
levels 屬性是由一個或者若干個以下值組成的數(shù)組:

error:相應(yīng)的消息通過 Yii::error() 被記錄。

warning:相應(yīng)的消息通過 Yii::warning() 被記錄。

info:相應(yīng)的消息通過 Yii::info() 被記錄。

trace:相應(yīng)的消息通過 Yii::trace() 被記錄。

profile:相應(yīng)的消息通過 Yii::beginProfile() 和 Yii::endProfile() 被記錄。更多細(xì)節(jié)將在 Profiling 分段解釋。

如果你沒有指定 levels 的屬性, 那就意味著目標(biāo)將處理 任何 嚴(yán)重程度的消息。
如果你沒有指定 categories 屬性,這意味著目標(biāo)將會處理 任何 分類的消息。

消息格式化

日志目標(biāo)以某種格式導(dǎo)出過濾過的日志消息。例如,假如你安裝一個 FileTarget 類的日志目標(biāo), 你應(yīng)該能找出一個日志消息類似下面的 runtime/log/app.log 文件:

2014-10-04 18:10:15 [::1][][-][trace][yiiaseModule::getModule] Loading module: debug

你可以通過配置 yiilogTarget::prefix 的屬性來自定義格式,這個屬性是一個PHP可調(diào)用體返回的自定義消息前綴。例如,下面的代碼配置了一個日志目標(biāo)的前綴是每個日志消息中當(dāng)前用戶的ID(IP地址和Session ID被刪除是由于隱私的原因)。

[ 
    "class" => "yiilogFileTarget", 
    "prefix" => function ($message) { 
        $user = Yii::$app->has("user", true) ? Yii::$app->get("user") : null; 
        $userID = $user ? $user->getId(false) : "-";
        return "[$userID]"; 
    } 
]

除了消息前綴以外,日志目標(biāo)也可以追加一些上下文信息到每組日志消息中。

你可以通過配置 logVars 屬性適應(yīng)這個行為,這個屬性是你想要通過日志目標(biāo)包含的全局變量名稱。

舉個例子,下面的日志目標(biāo)配置指明了只有 $_SERVER 變量的值將被追加到日志消息中:

[ 
    "class" => "yiilogFileTarget", 
    "logVars" => ["_SERVER"], 
]

你可以將 logVars 配置成一個空數(shù)組來完全禁止上下文信息包含?;蛘呒偃缒阆胍獙?shí)現(xiàn)你自己提供上下文信息的方式, 你可以重寫 yiilogTarget::getContextMessage() 方法。

日志寫入的案例

1、在具體的控制器上進(jìn)行日志收集處理,調(diào)用相應(yīng)的日志接口即可。

其中傳參需要注意,日志內(nèi)容($content)和控制器方法路徑(魔術(shù)常量 __METHOD__)需要保證必傳。

2、對應(yīng)日志處理接口處理,實(shí)現(xiàn)代碼封裝。

日志收集接口代碼封裝需要注意幾個點(diǎn):
(1)組裝日志內(nèi)容需要按照與團(tuán)隊(duì)內(nèi)部約定好的格式進(jìn)行拼接組裝。

(2)確定好日志文件路徑($logFile),和文件命名規(guī)則,因?yàn)槿罩究赡苁菍?shí)時,可能需要生產(chǎn)多個日志文件。

(3)日志寫入內(nèi)容時判斷日志文件是否存在(是否需要新建),寫入時利用 flock() 進(jìn)行文件獨(dú)占鎖定(目的是避免同時操作同一份日志),利用 clearstatcache() 函數(shù)清除文件狀態(tài),再日志內(nèi)容寫入日志文件。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21613.html

相關(guān)文章

  • Yii修行之路 - Security 安全

    摘要:認(rèn)證事件類在登錄和注銷流程引發(fā)一些事件。成功注銷后引發(fā)。提供兩種授權(quán)方法存取控制過濾器和基于角色的存取控制。允許已認(rèn)證用戶執(zhí)行操作。指定一個回調(diào)函數(shù)用于判定該規(guī)則是否滿足條件。 簡述 在程序開發(fā)過程中,往往都不能忽視安全問題,無論你的框架有多么完美,都會有破綻,所以完善自己的系統(tǒng),從程序開發(fā)的安全角度去思考問題,把一切潛在的危機(jī)扼殺在搖籃中。 認(rèn)證(Authentication) 認(rèn)證...

    AaronYuan 評論0 收藏0
  • Yii 修行之路 - Gii 代碼生成器

    摘要:簡述是一個強(qiáng)大的代碼生成器,主要用于后臺代碼生成。下面列出由生成的文件,以便你研習(xí)功能和實(shí)現(xiàn),或修改它們控制器模型和視圖補(bǔ)充被設(shè)計(jì)成高度可定制和可擴(kuò)展的代碼生成工具。使用生成代碼是一個基于界面的代碼生成工具。 簡述 Gii 是一個強(qiáng)大的代碼生成器,主要用于后臺代碼生成。 開始 Gii Gii 是 Yii 中的一個模塊??梢酝ㄟ^配置應(yīng)用的 yiibaseApplication::modu...

    fuchenxuan 評論0 收藏0
  • Yii修行之路 - Extension 擴(kuò)展

    摘要:運(yùn)行來安裝指定的擴(kuò)展。這更便于用戶辨別是否是的擴(kuò)展。當(dāng)用戶運(yùn)行安裝一個擴(kuò)展時,文件會被自動更新使之包含新擴(kuò)展的信息。上述代碼表明該擴(kuò)展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達(dá)到這個目的,你應(yīng)當(dāng)在公開發(fā)布前做測試。 簡述 擴(kuò)展是專門設(shè)計(jì)的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴(kuò)展在你的應(yīng)用的每個頁面底部添加...

    bovenson 評論0 收藏0
  • Yii 修行之路 - Migration 數(shù)據(jù)遷移

    摘要:把所有的增量數(shù)據(jù)庫遷移提交到生產(chǎn)環(huán)境數(shù)據(jù)庫當(dāng)中。如果其中任意一個遷移提交失敗了,那么這條命令將會退出并停止剩下的那些還未執(zhí)行的遷移。執(zhí)行這條命令期間不會有任何的遷移會被提交或還原。 簡述 數(shù)據(jù)遷移就是數(shù)據(jù)庫表在團(tuán)隊(duì)建的遷移操作,達(dá)到團(tuán)隊(duì)相互間的信息同步,數(shù)據(jù)統(tǒng)一。 數(shù)據(jù)庫遷移 一般步驟: 1、在 yii2 的 migrate 中,通常用來對數(shù)據(jù)庫數(shù)據(jù)表進(jìn)行修改操作,主要對結(jié)構(gòu)和小部分?jǐn)?shù)...

    noONE 評論0 收藏0
  • Yii 修行之路 - Console 控制臺命令

    摘要:它由一個或多個類組成,它們在控制臺環(huán)境下通常被稱為命令??刂婆_入口腳本通常被稱為,位于應(yīng)用程序的根目錄。選項(xiàng)通過覆蓋在中的方法,你可以指定可用于控制臺命令選項(xiàng)。參數(shù)將傳遞給請求的子命令對應(yīng)的操作方法。通常,執(zhí)行成功的命令會返回。 簡述 控制臺應(yīng)用程序的結(jié)構(gòu)非常類似于 Yii 的一個 Web 應(yīng)用程序,主要用于終端服務(wù)器執(zhí)行。 控制臺命令 控制臺應(yīng)用程序的結(jié)構(gòu)非常類似于 Yii 的一個 ...

    everfly 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<