0 關注者

抽象類別 yii\log\Target

繼承關係yii\log\Target » yii\base\Component » yii\base\BaseObject
實作介面yii\base\Configurable
子類別yii\log\DbTarget, yii\log\EmailTarget, yii\log\FileTarget, yii\log\SyslogTarget
自版本起可用2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/log/Target.php

Target 是所有日誌目標類別的基礎類別。

日誌目標物件將會根據其 $levels$categories 屬性,過濾由 yii\log\Logger 記錄的訊息。它也可能將過濾後的訊息匯出到目標定義的特定目的地,例如電子郵件、檔案。

層級過濾器和類別過濾器是組合式的,也就是說,只有同時滿足這兩個過濾條件的訊息才会被處理。此外,您可以指定 $except 以排除某些類別的訊息。

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$behaviors yii\base\Behavior[] 附加到此組件的行為列表。 yii\base\Component
$categories 陣列 此目標感興趣的訊息類別列表。 yii\log\Target
$enabled 布林值 指示此日誌目標是否已啟用。 yii\log\Target
$except 陣列 此目標不感興趣的訊息類別列表。 yii\log\Target
$exportInterval 整數 在匯出之前應累積多少訊息。 yii\log\Target
$levels 整數 此目標感興趣的訊息層級。 yii\log\Target
$logVars 陣列 應記錄在訊息中的 PHP 預定義變數列表。 yii\log\Target
$maskVars 陣列 應「不加修改」記錄的 PHP 預定義變數列表,並且在存在時,在記錄之前始終應替換為遮罩 *** yii\log\Target
$messages 陣列 到目前為止,此日誌目標從記錄器檢索的訊息。 yii\log\Target
$microtime 布林值 是否記錄微秒時間。 yii\log\Target
$prefix callable|null 一個 PHP 可調用物件,它返回一個字串,該字串將作為每個匯出訊息的前綴。 yii\log\Target

公開方法

隱藏繼承的方法

方法 描述 定義於
__call() 調用指定的非類別方法。 yii\base\Component
__clone() 此方法在通過克隆現有物件創建物件後調用。 yii\base\Component
__construct() 建構子。 yii\base\BaseObject
__get() 返回組件屬性的值。 yii\base\Component
__isset() 檢查屬性是否已設定,即已定義且不為 null。 yii\base\Component
__set() 設定組件屬性的值。 yii\base\Component
__unset() 將組件屬性設定為 null。 yii\base\Component
attachBehavior() 將行為附加到此組件。 yii\base\Component
attachBehaviors() 將行為列表附加到組件。 yii\base\Component
behaviors() 返回此組件應表現為的行為列表。 yii\base\Component
canGetProperty() 返回一個值,指示屬性是否可讀。 yii\base\Component
canSetProperty() 返回一個值,指示屬性是否可設定。 yii\base\Component
className() 返回此類別的完整限定名稱。 yii\base\BaseObject
collect() 處理給定的日誌訊息。 yii\log\Target
detachBehavior() 從組件中分離行為。 yii\base\Component
detachBehaviors() 從組件中分離所有行為。 yii\base\Component
ensureBehaviors() 確保在 behaviors() 中宣告的行為已附加到此組件。 yii\base\Component
export() 將日誌 $messages 匯出到特定目的地。 yii\log\Target
filterMessages() 根據給定的訊息類別和層級過濾訊息。 yii\log\Target
formatMessage() 格式化日誌訊息以字串形式顯示。 yii\log\Target
getBehavior() 返回指定的行為物件。 yii\base\Component
getBehaviors() 返回附加到此組件的所有行為。 yii\base\Component
getEnabled() 檢查日誌目標是否已啟用。 yii\log\Target
getLevels() yii\log\Target
getMessagePrefix() 返回一個字串,該字串將作為給定訊息的前綴。 yii\log\Target
hasEventHandlers() 返回一個值,指示是否有名稱事件附加任何處理程序。 yii\base\Component
hasMethod() 返回一個值,指示是否已定義方法。 yii\base\Component
hasProperty() 返回一個值,指示是否為此組件定義了屬性。 yii\base\Component
init() 初始化物件。 yii\base\BaseObject
off() 從此組件中分離現有的事件處理程序。 yii\base\Component
on() 將事件處理程序附加到事件。 yii\base\Component
setEnabled() 設定一個值,指示是否啟用此日誌目標。 yii\log\Target
setLevels() 設定此目標感興趣的訊息層級。 yii\log\Target
trigger() 觸發一個事件。 yii\base\Component

受保護的方法

隱藏繼承的方法

方法 描述 定義於
getContextMessage() 產生要記錄的上下文資訊。 yii\log\Target
getTime() 傳回訊息的格式化時間戳記 ('Y-m-d H:i:s')。 yii\log\Target

屬性詳細資訊

隱藏繼承的屬性

$categories 公有屬性

此目標感興趣的訊息類別列表。預設為空,表示所有類別。您可以在類別結尾使用星號,以便該類別可用於比對具有相同共同前綴的類別。例如,'yii\db*' 將比對以 'yii\db\' 開頭的類別,例如 'yii\db\Connection'。

public array $categories = []
$enabled 公有屬性

指示是否啟用此日誌目標。預設為 true。請注意,此屬性的類型在 getter 和 setter 中有所不同。請參閱 getEnabled()setEnabled() 以取得詳細資訊。

public boolean $enabled null
$except 公有屬性

此目標不感興趣的訊息類別列表。預設為空,表示沒有不感興趣的訊息。如果此屬性不為空,則此處列出的任何類別都將從 $categories 中排除。您可以在類別結尾使用星號,以便該類別可用於比對具有相同共同前綴的類別。例如,'yii\db*' 將比對以 'yii\db\' 開頭的類別,例如 'yii\db\Connection'。

另請參閱 $categories

public array $except = []
$exportInterval 公有屬性

在匯出之前應累積多少訊息。預設為 1000。請注意,當應用程式終止時,訊息將始終匯出。如果您不想在應用程式終止之前匯出訊息,請將此屬性設定為 0。

public integer $exportInterval 1000
$levels 公有屬性

此目標感興趣的訊息層級。這是層級值的位元遮罩。預設為 0,表示所有可用層級。請注意,此屬性的類型在 getter 和 setter 中有所不同。請參閱 getLevels()setLevels() 以取得詳細資訊。

有關 Target 的更多詳細資訊和使用資訊,請參閱關於日誌記錄和目標的指南文章

public integer $levels null
$logVars 公有屬性

應記錄在訊息中的 PHP 預定義變數列表。請注意,變數必須可透過 $GLOBALS 存取。否則,它將不會被記錄。

預設為 ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION', '_SERVER']

自版本 2.0.9 起,可以使用其他語法:每個元素都可以指定為以下之一

  • var - 將記錄 var
  • var.key - 僅記錄 var[key] 鍵。
  • !var.key - 將排除 var[key] 鍵。

請注意,如果您需要記錄 $_SESSION,無論是否使用 session,您都必須在請求開始時立即開啟它。

另請參閱 yii\helpers\ArrayHelper::filter()

public array $logVars = [
    
'_GET',
    
'_POST',
    
'_FILES',
    
'_COOKIE',
    
'_SESSION',
    
'_SERVER',
]
$maskVars 公有屬性 (自版本 2.0.16 起可用)

應「不加修改」記錄的 PHP 預定義變數列表,並且在存在時,在記錄之前始終應替換為遮罩 ***

預設為 [ '_SERVER.HTTP_AUTHORIZATION', '_SERVER.PHP_AUTH_USER', '_SERVER.PHP_AUTH_PW']

每個元素都可以指定為以下之一

  • var - var 將記錄為 ***
  • var.key - 僅 var[key] 將記錄為 ***
public array $maskVars = [
    
'_SERVER.HTTP_AUTHORIZATION',
    
'_SERVER.PHP_AUTH_USER',
    
'_SERVER.PHP_AUTH_PW',
]
$messages 公有屬性

此日誌目標至今從記錄器檢索的訊息。請參閱 yii\log\Logger::$messages 以取得有關訊息結構的詳細資訊。

public array $messages = []
$microtime 公有屬性 (自版本 2.0.13 起可用)

是否記錄帶有微秒的時間。預設為 false。

public boolean $microtime false
$prefix 公有屬性

一個 PHP 可調用物件,它返回一個字串,該字串將作為每個匯出訊息的前綴。

如果未設定,將使用 getMessagePrefix(),它會使用上下文資訊(例如使用者 IP、使用者 ID 和 session ID)為訊息添加前綴。

callable 的簽章應為 function ($message)

public callable|null $prefix null

方法詳細資訊

隱藏繼承的方法

__call() 公有方法

定義於: yii\base\Component::__call()

調用指定的非類別方法。

此方法將檢查任何附加的行為是否具有指定名稱的方法,如果有的話,將執行該方法。

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當呼叫未知方法時將會隱式呼叫它。

public mixed __call ( $name, $params )
$name string

方法名稱

$params 陣列

方法參數

return mixed

方法傳回值

throws yii\base\UnknownMethodException

當呼叫未知方法時

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公有方法

定義於: yii\base\Component::__clone()

此方法在通過克隆現有物件創建物件後調用。

它會移除所有行為,因為它們附加到舊物件。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公有方法

定義於: yii\base\BaseObject::__construct()

建構子。

預設實作會執行兩件事

  • 使用給定的組態 $config 初始化物件。
  • 呼叫 init()

如果在子類別中覆寫此方法,建議

  • 建構子的最後一個參數是組態陣列,例如此處的 $config
  • 在建構子的結尾呼叫父類別的實作。
public void __construct ( $config = [] )
$config 陣列

將用於初始化物件屬性的名稱-值對

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公有方法

定義於: yii\base\Component::__get()

返回組件屬性的值。

此方法將依以下順序檢查並採取相應行動

  • getter 定義的屬性:傳回 getter 結果
  • 行為的屬性:傳回行為屬性值

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $value = $component->property; 時將會隱式呼叫它。

另請參閱 __set()

public mixed __get ( $name )
$name string

屬性名稱

return mixed

屬性值或行為屬性的值

throws yii\base\UnknownPropertyException

如果未定義屬性

throws yii\base\InvalidCallException

如果屬性為唯寫。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公有方法

定義於: yii\base\Component::__isset()

檢查屬性是否已設定,即已定義且不為 null。

此方法將依以下順序檢查並採取相應行動

  • setter 定義的屬性:傳回屬性是否已設定
  • 行為的屬性:傳回屬性是否已設定
  • 對於不存在的屬性傳回 false

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 isset($component->property) 時將會隱式呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

屬性名稱或事件名稱

return 布林值

具名屬性是否已設定

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公有方法

定義於: yii\base\Component::__set()

設定組件屬性的值。

此方法將依以下順序檢查並採取相應行動

  • setter 定義的屬性:設定屬性值
  • 格式為 "on xyz" 的事件:將處理常式附加到事件 "xyz"
  • 格式為 "as xyz" 的行為:附加名為 "xyz" 的行為
  • 行為的屬性:設定行為屬性值

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $component->property = $value; 時將會隱式呼叫它。

另請參閱 __get()

public void __set ( $name, $value )
$name string

屬性名稱或事件名稱

$value mixed

屬性值

throws yii\base\UnknownPropertyException

如果未定義屬性

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公有方法

定義於: yii\base\Component::__unset()

將組件屬性設定為 null。

此方法將依以下順序檢查並採取相應行動

  • setter 定義的屬性:將屬性值設定為 null
  • 行為的屬性:將屬性值設定為 null

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 unset($component->property) 時將會隱式呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.unset.php

public void __unset ( $name )
$name string

屬性名稱

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
attachBehavior() 公有方法

定義於: yii\base\Component::attachBehavior()

將行為附加到此組件。

此方法將根據給定的組態建立行為物件。之後,將透過呼叫 yii\base\Behavior::attach() 方法將行為物件附加到此元件。

另請參閱 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行為的名稱。

$behavior string|array|yii\base\Behavior

行為組態。這可以是以下之一

return yii\base\Behavior

行為物件

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公有方法

定義於: yii\base\Component::attachBehaviors()

將行為列表附加到組件。

每個行為都由其名稱索引,並且應該是 yii\base\Behavior 物件、指定行為類別的字串或用於建立行為的組態陣列。

另請參閱 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors 陣列

要附加到元件的行為列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() 公有方法

定義於: yii\base\Component::behaviors()

返回此組件應表現為的行為列表。

子類別可以覆寫此方法以指定它們想要表現為的行為。

此方法的傳回值應該是由行為名稱索引的行為物件或組態陣列。行為組態可以是指定行為類別的字串或以下結構的陣列

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

請注意,行為類別必須從 yii\base\Behavior 擴展。行為可以使用名稱或匿名方式附加。當名稱用作陣列鍵時,使用此名稱,稍後可以使用 getBehavior() 檢索行為,或使用 detachBehavior() 分離行為。匿名行為無法檢索或分離。

在此方法中宣告的行為將自動附加到元件(按需)。

public array behaviors ( )
return 陣列

行為組態。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公有方法

定義於: yii\base\Component::canGetProperty()

返回一個值,指示屬性是否可讀。

如果符合以下條件,則可以讀取屬性

  • 類別具有與指定名稱相關聯的 getter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可讀屬性(當 $checkBehaviors 為 true 時)。

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars 布林值

是否將成員變數視為屬性

$checkBehaviors 布林值

是否將行為的屬性視為此元件的屬性

return 布林值

屬性是否可讀

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公有方法

定義於: yii\base\Component::canSetProperty()

返回一個值,指示屬性是否可設定。

如果符合以下條件,則可以寫入屬性

  • 類別具有與指定名稱相關聯的 setter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可寫屬性(當 $checkBehaviors 為 true 時)。

另請參閱 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars 布林值

是否將成員變數視為屬性

$checkBehaviors 布林值

是否將行為的屬性視為此元件的屬性

return 布林值

屬性是否可寫入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() 公有靜態方法
自 2.0.14 版本起已棄用。在 PHP >=5.5 上,請改用 ::class

定義於: yii\base\BaseObject::className()

返回此類別的完整限定名稱。

public static string className ( )
return string

此類別的完整限定名稱。

                public static function className()
{
    return get_called_class();
}

            
collect() public method

處理給定的日誌訊息。

此方法將使用 $levels$categories 過濾給定的訊息。並且如果需要,它也會將過濾結果匯出到特定媒介(例如:電子郵件)。

public void collect ( $messages, $final )
$messages 陣列

要處理的日誌訊息。請參閱 yii\log\Logger::$messages 以了解每個訊息的結構。

$final 布林值

此方法是否在目前應用程式結束時呼叫

                public function collect($messages, $final)
{
    $this->messages = array_merge($this->messages, static::filterMessages($messages, $this->getLevels(), $this->categories, $this->except));
    $count = count($this->messages);
    if ($count > 0 && ($final || $this->exportInterval > 0 && $count >= $this->exportInterval)) {
        if (($context = $this->getContextMessage()) !== '') {
            $this->messages[] = [$context, Logger::LEVEL_INFO, 'application', YII_BEGIN_TIME, [], 0];
        }
        // set exportInterval to 0 to avoid triggering export again while exporting
        $oldExportInterval = $this->exportInterval;
        $this->exportInterval = 0;
        $this->export();
        $this->exportInterval = $oldExportInterval;
        $this->messages = [];
    }
}

            
detachBehavior() public method

定義於: yii\base\Component::detachBehavior()

從組件中分離行為。

將會調用行為 (behavior) 的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行為 (behavior) 的名稱。

return yii\base\Behavior|null

已分離的行為 (behavior)。如果行為 (behavior) 不存在,則為 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public method

定義於: yii\base\Component::detachBehaviors()

從組件中分離所有行為。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public method

定義於: yii\base\Component::ensureBehaviors()

確保在 behaviors() 中宣告的行為已附加到此組件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
export() public abstract method

將日誌 $messages 匯出到特定目的地。

子類別必須實作此方法。

public abstract void export ( )

                abstract public function export();

            
filterMessages() public static method

根據給定的訊息類別和層級過濾訊息。

public static array filterMessages ( $messages, $levels 0, $categories = [], $except = [] )
$messages 陣列

要過濾的訊息。訊息結構遵循 yii\log\Logger::$messages 中的結構。

$levels 整數

要依訊息層級過濾。這是層級值的位元遮罩 (bitmap)。值 0 表示允許所有層級。

$categories 陣列

要依訊息類別過濾。如果為空,表示允許所有類別。

$except 陣列

要排除的訊息類別。如果為空,表示允許所有類別。

return 陣列

已過濾的訊息。

                public static function filterMessages($messages, $levels = 0, $categories = [], $except = [])
{
    foreach ($messages as $i => $message) {
        if ($levels && !($levels & $message[1])) {
            unset($messages[$i]);
            continue;
        }
        $matched = empty($categories);
        foreach ($categories as $category) {
            if ($message[2] === $category || !empty($category) && substr_compare($category, '*', -1, 1) === 0 && strpos($message[2], rtrim($category, '*')) === 0) {
                $matched = true;
                break;
            }
        }
        if ($matched) {
            foreach ($except as $category) {
                $prefix = rtrim($category, '*');
                if (($message[2] === $category || $prefix !== $category) && strpos($message[2], $prefix) === 0) {
                    $matched = false;
                    break;
                }
            }
        }
        if (!$matched) {
            unset($messages[$i]);
        }
    }
    return $messages;
}

            
formatMessage() public method

格式化日誌訊息以字串形式顯示。

public string formatMessage ( $message )
$message 陣列

要格式化的日誌訊息。訊息結構遵循 yii\log\Logger::$messages 中的結構。

return string

已格式化的訊息

                public function formatMessage($message)
{
    list($text, $level, $category, $timestamp) = $message;
    $level = Logger::getLevelName($level);
    if (!is_string($text)) {
        // exceptions may not be serializable if in the call stack somewhere is a Closure
        if ($text instanceof \Exception || $text instanceof \Throwable) {
            $text = (string) $text;
        } else {
            $text = VarDumper::export($text);
        }
    }
    $traces = [];
    if (isset($message[4])) {
        foreach ($message[4] as $trace) {
            $traces[] = "in {$trace['file']}:{$trace['line']}";
        }
    }
    $prefix = $this->getMessagePrefix($message);
    return $this->getTime($timestamp) . " {$prefix}[$level][$category] $text"
        . (empty($traces) ? '' : "\n    " . implode("\n    ", $traces));
}

            
getBehavior() public method

定義於: yii\base\Component::getBehavior()

返回指定的行為物件。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行為 (behavior) 名稱

return yii\base\Behavior|null

行為 (behavior) 物件,如果行為 (behavior) 不存在則為 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public method

定義於: yii\base\Component::getBehaviors()

返回附加到此組件的所有行為。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此組件的行為 (behavior) 清單

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getContextMessage() protected method

產生要記錄的上下文資訊。

預設實作將會傾印使用者資訊、系統變數等等。

protected string getContextMessage ( )
return string

上下文資訊。如果為空字串,表示沒有上下文資訊。

                protected function getContextMessage()
{
    $context = ArrayHelper::filter($GLOBALS, $this->logVars);
    foreach ($this->maskVars as $var) {
        if (ArrayHelper::getValue($context, $var) !== null) {
            ArrayHelper::setValue($context, $var, '***');
        }
    }
    $result = [];
    foreach ($context as $key => $value) {
        $result[] = "\${$key} = " . VarDumper::dumpAsString($value);
    }
    return implode("\n\n", $result);
}

            
getEnabled() public method

檢查日誌目標是否已啟用。

public boolean getEnabled ( )
return 布林值

指示此日誌目標是否啟用的值。

                public function getEnabled()
{
    if (is_callable($this->_enabled)) {
        return call_user_func($this->_enabled, $this);
    }
    return $this->_enabled;
}

            
getLevels() public method

public integer getLevels ( )
return 整數

此目標感興趣的訊息層級。這是層級值的位元遮罩 (bitmap)。預設值為 0,表示所有可用層級。

                public function getLevels()
{
    return $this->_levels;
}

            
getMessagePrefix() public method

返回一個字串,該字串將作為給定訊息的前綴。

如果配置了 $prefix,它將返回回呼 (callback) 的結果。預設實作將返回使用者 IP、使用者 ID 和 Session ID 作為前綴。

public string getMessagePrefix ( $message )
$message 陣列

正在匯出的訊息。訊息結構遵循 yii\log\Logger::$messages 中的結構。

return string

前綴字串

                public function getMessagePrefix($message)
{
    if ($this->prefix !== null) {
        return call_user_func($this->prefix, $message);
    }
    if (Yii::$app === null) {
        return '';
    }
    $request = Yii::$app->getRequest();
    $ip = $request instanceof Request ? $request->getUserIP() : '-';
    /* @var $user \yii\web\User */
    $user = Yii::$app->has('user', true) ? Yii::$app->get('user') : null;
    if ($user && ($identity = $user->getIdentity(false))) {
        $userID = $identity->getId();
    } else {
        $userID = '-';
    }
    /* @var $session \yii\web\Session */
    $session = Yii::$app->has('session', true) ? Yii::$app->get('session') : null;
    $sessionID = $session && $session->getIsActive() ? $session->getId() : '-';
    return "[$ip][$userID][$sessionID]";
}

            
getTime() protected method (version 2.0.13 以後可用)

傳回訊息的格式化時間戳記 ('Y-m-d H:i:s')。

如果 $microtime 配置為 true,它將返回 'Y-m-d H:i:s.u' 格式。

protected string getTime ( $timestamp )
$timestamp float

                protected function getTime($timestamp)
{
    $parts = explode('.', sprintf('%F', $timestamp));
    return date('Y-m-d H:i:s', $parts[0]) . ($this->microtime ? ('.' . $parts[1]) : '');
}

            
hasEventHandlers() public method

定義於: yii\base\Component::hasEventHandlers()

返回一個值,指示是否有名稱事件附加任何處理程序。

public boolean hasEventHandlers ( $name )
$name string

事件名稱

return 布林值

是否有任何處理常式 (handler) 附加到事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public method

定義於: yii\base\Component::hasMethod()

返回一個值,指示是否已定義方法。

方法定義於

  • 類別具有指定名稱的方法
  • 附加的行為 (behavior) 具有給定名稱的方法 (當 $checkBehaviors 為 true 時)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

屬性名稱

$checkBehaviors 布林值

是否將行為 (behavior) 的方法視為此組件的方法

return 布林值

方法是否已定義

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() public method

定義於: yii\base\Component::hasProperty()

返回一個值,指示是否為此組件定義了屬性。

屬性定義於

  • 類別具有與指定名稱相關聯的 getter 或 setter 方法 (在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為 (behavior) 具有給定名稱的屬性 (當 $checkBehaviors 為 true 時)。

另請參閱

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars 布林值

是否將成員變數視為屬性

$checkBehaviors 布林值

是否將行為的屬性視為此元件的屬性

return 布林值

屬性是否已定義

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() public method

定義於: yii\base\BaseObject::init()

初始化物件。

此方法在物件以給定配置初始化後,於建構函式 (constructor) 的結尾調用。

public void init ( )

                public function init()
{
}

            
off() public method

定義於: yii\base\Component::off()

從此組件中分離現有的事件處理程序。

此方法與 on() 相反。

注意:如果為事件名稱傳遞了萬用字元模式,則只會移除使用此萬用字元註冊的處理常式 (handler),而使用符合此萬用字元的純名稱註冊的處理常式 (handler) 將會保留。

另請參閱 on()

public boolean off ( $name, $handler null )
$name string

事件名稱

$handler callable|null

要移除的事件處理常式 (handler)。如果為 null,則會移除附加到具名事件的所有處理常式 (handler)。

return 布林值

如果找到並分離處理常式 (handler)

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

定義於: yii\base\Component::on()

將事件處理程序附加到事件。

事件處理常式 (handler) 必須是有效的 PHP 回呼 (callback)。以下是一些範例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件處理常式 (handler) 必須使用以下簽名定義,

function ($event)

其中 $event 是一個 yii\base\Event 物件,其中包含與事件相關聯的參數。

自 2.0.14 版本起,您可以將事件名稱指定為萬用字元模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另請參閱 off()

public void on ( $name, $handler, $data null, $append true )
$name string

事件名稱

$handler 可呼叫 (callable)

事件處理常式 (handler)

$data mixed

事件觸發時要傳遞給事件處理常式 (handler) 的資料。當調用事件處理常式 (handler) 時,可以透過 yii\base\Event::$data 存取此資料。

$append 布林值

是否將新的事件處理常式 (handler) 附加到現有處理常式 (handler) 清單的末尾。如果為 false,則新的處理常式 (handler) 將插入到現有處理常式 (handler) 清單的開頭。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
setEnabled() public method

設定一個值,指示是否啟用此日誌目標。

public void setEnabled ( $value )
$value boolean|callable

布林值或可呼叫 (callable) 物件,用於從中取得值。可呼叫 (callable) 值自 2.0.13 版本起可用。

可使用可呼叫 (callable) 物件以動態方式判斷是否應啟用日誌目標。例如,若要僅在目前使用者登入時才啟用日誌,您可以將目標配置如下

'enabled' => function() {
    return !Yii::$app->user->isGuest;
}

                public function setEnabled($value)
{
    $this->_enabled = $value;
}

            
setLevels() public method

設定此目標感興趣的訊息層級。

參數可以是感興趣的層級名稱陣列,或表示感興趣的層級值的位元遮罩 (bitmap) 的整數。有效層級名稱包括:'error'、'warning'、'info'、'trace' 和 'profile';有效層級值包括:yii\log\Logger::LEVEL_ERRORyii\log\Logger::LEVEL_WARNINGyii\log\Logger::LEVEL_INFOyii\log\Logger::LEVEL_TRACEyii\log\Logger::LEVEL_PROFILE

例如,

['error', 'warning']
// which is equivalent to:
Logger::LEVEL_ERROR | Logger::LEVEL_WARNING
public void setLevels ( $levels )
$levels array|integer

此目標感興趣的訊息層級。

throws yii\base\InvalidConfigException

如果 $levels 值不正確。

                public function setLevels($levels)
{
    static $levelMap = [
        'error' => Logger::LEVEL_ERROR,
        'warning' => Logger::LEVEL_WARNING,
        'info' => Logger::LEVEL_INFO,
        'trace' => Logger::LEVEL_TRACE,
        'profile' => Logger::LEVEL_PROFILE,
    ];
    if (is_array($levels)) {
        $this->_levels = 0;
        foreach ($levels as $level) {
            if (isset($levelMap[$level])) {
                $this->_levels |= $levelMap[$level];
            } else {
                throw new InvalidConfigException("Unrecognized level: $level");
            }
        }
    } else {
        $bitmapValues = array_reduce($levelMap, function ($carry, $item) {
            return $carry | $item;
        });
        if (!($bitmapValues & $levels) && $levels !== 0) {
            throw new InvalidConfigException("Incorrect $levels value");
        }
        $this->_levels = $levels;
    }
}

            
trigger() public method

定義於: yii\base\Component::trigger()

觸發一個事件。

此方法表示事件的發生。它會調用事件的所有附加處理常式 (handler),包括類別層級的處理常式 (handler)。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名稱

$event yii\base\Event|null

事件實例。如果未設定,將會建立預設的 yii\base\Event 物件。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}