Class yii\elasticsearch\ElasticsearchTarget
Inheritance | yii\elasticsearch\ElasticsearchTarget » yii\log\Target |
---|---|
Available since extension's version | 2.0.5 |
Source Code | https://github.com/yiisoft/yii2-elasticsearch/blob/master/ElasticsearchTarget.php |
ElasticsearchTarget stores log messages in a Elasticsearch index.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$_contextMessage | string | Context message cache (can be used multiple times if context is appended to every message) | yii\elasticsearch\ElasticsearchTarget |
$cacheContext | boolean | If true, context message will cached once it's been created. | yii\elasticsearch\ElasticsearchTarget |
$db | yii\elasticsearch\Connection|array|string | The Elasticsearch connection object or the application component ID of the Elasticsearch connection. | yii\elasticsearch\ElasticsearchTarget |
$includeContext | boolean | If true, context will be included in every message. | yii\elasticsearch\ElasticsearchTarget |
$index | string | Elasticsearch index name. | yii\elasticsearch\ElasticsearchTarget |
$logContext | boolean | If true, context will be logged as a separate message after all other messages. | yii\elasticsearch\ElasticsearchTarget |
$options | array | URL options. | yii\elasticsearch\ElasticsearchTarget |
$type | string | Elasticsearch type name. | yii\elasticsearch\ElasticsearchTarget |
Public Methods
Method | Description | Defined By |
---|---|---|
collect() | Processes the given log messages. | yii\elasticsearch\ElasticsearchTarget |
export() | yii\elasticsearch\ElasticsearchTarget | |
init() | This method will initialize the elasticsearch property to make sure it refers to a valid Elasticsearch connection. | yii\elasticsearch\ElasticsearchTarget |
prepareMessage() | Prepares a log message. | yii\elasticsearch\ElasticsearchTarget |
Protected Methods
Method | Description | Defined By |
---|---|---|
getContextMessage() | If $includeContext property is false, returns context message normally. | yii\elasticsearch\ElasticsearchTarget |
Property Details
Context message cache (can be used multiple times if context is appended to every message)
If true, context message will cached once it's been created. Makes sense to use with $includeContext.
The Elasticsearch connection object or the application component ID of the Elasticsearch connection.
If true, context will be included in every message. This is convenient if you log application errors and analyze them with tools like Kibana.
If true, context will be logged as a separate message after all other messages.
Method Details
Processes the given log messages.
This method will filter the given messages with levels and categories. And if requested, it will also export the filtering result to specific medium (e.g. email). Depending on the $includeContext attribute, a context message will be either created or ignored.
public void collect ( $messages, $final ) | ||
$messages | array |
Log messages to be processed. See Logger::messages for the structure of each message. |
$final | boolean |
Whether this method is called at the end of the current application |
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 (!$this->includeContext && $this->logContext) {
$context = $this->getContextMessage();
if (!empty($context)) {
$this->messages[] = [$context, Logger::LEVEL_INFO, 'application', YII_BEGIN_TIME];
}
}
// set exportInterval to 0 to avoid triggering export again while exporting
$oldExportInterval = $this->exportInterval;
$this->exportInterval = 0;
$this->export();
$this->exportInterval = $oldExportInterval;
$this->messages = [];
}
}
public void export ( ) |
public function export()
{
$messages = array_map([$this, 'prepareMessage'], $this->messages);
$body = implode("\n", $messages) . "\n";
if ($this->db->dslVersion >= 7) {
$this->db->post([$this->index, '_bulk'], $this->options, $body);
} else {
$this->db->post([$this->index, $this->type, '_bulk'], $this->options, $body);
}
}
If $includeContext property is false, returns context message normally.
If $includeContext is true, returns an empty string (so that context message in collect() is not generated), expecting that context will be appended to every message in prepareMessage().
protected array getContextMessage ( ) | ||
return | array |
The context information |
---|
protected function getContextMessage()
{
if (null === $this->_contextMessage || !$this->cacheContext) {
$this->_contextMessage = ArrayHelper::filter($GLOBALS, $this->logVars);
}
return $this->_contextMessage;
}
This method will initialize the elasticsearch property to make sure it refers to a valid Elasticsearch connection.
public void init ( ) | ||
throws | \yii\base\InvalidConfigException |
if elasticsearch is invalid. |
---|
public function init()
{
parent::init();
$this->db = Instance::ensure($this->db, Connection::className());
}
Prepares a log message.
public string prepareMessage ( $message ) | ||
$message | array |
The log message to be formatted. |
public function prepareMessage($message)
{
list($text, $level, $category, $timestamp) = $message;
$result = [
'category' => $category,
'level' => Logger::getLevelName($level),
'@timestamp' => date('c', $timestamp),
];
if (isset($message[4])) {
$result['trace'] = $message[4];
}
if (!is_string($text)) {
// exceptions may not be serializable if in the call stack somewhere is a Closure
if ($text instanceof \Throwable || $text instanceof \Exception) {
$text = (string) $text;
} else {
$text = VarDumper::export($text);
}
}
$result['message'] = $text;
if ($this->includeContext) {
$result['context'] = $this->getContextMessage();
}
$message = implode("\n", [
Json::encode([
'index' => new \stdClass()
]),
Json::encode($result)
]);
return $message;
}