yiisoft/log-target-db

Yii Logging Library - DB Target

1.1.0 2025-12-16 22:31 UTC

Requires

Suggests

None

Provides

None

Conflicts

None

Replaces

None

BSD-3-Clause 9eb033e19942de9681da602fb92c65ac1d6548ba

logframeworkloggeryii

This package is auto-updated.

Last update: 2026-06-24 21:46:40 UTC


README

👁 Yii

Yii Logging Library - DB Target


👁 Latest Stable Version
👁 Total Downloads
👁 codecov
👁 Mutation testing badge
👁 static analysis
👁 type-coverage

This package provides the Database target for the yiisoft/log library.

Supported databases

Packages PHP Versions CI-Actions
[db-mssql] 8.1 - 8.3 2017 - 2025 👁 mssql
[db-mysql] (MySQL) 8.1 - 8.3 5.7 - 9.5 👁 mysql
[db-mysql] (MariaDB) 8.1 - 8.3 10.4 - 12.10 👁 mariadb
[db-oracle] 8.1 - 8.3 11C - 21C 👁 oracle
[db-pgsql] 8.1 - 8.3 9.0 - 18.0 👁 pgsql
[db-sqlite] 8.1 - 8.3 3:latest 👁 sqlite

Requirements

  • PHP 8.1 or higher.
  • PDO PHP extension.

Installation

The package could be installed with Composer:

composer require yiisoft/log-target-db

Create database connection

For more information see yiisoft/db.

Database Preparing

Package provides two way for preparing database:

  1. Raw SQL. You can use it with the migration package used in your application.

  2. DbSchemaManager for ensureTable(), ensureNoTable() methods for log table (by default {{%yii_log}}).

// Create db schema manager
$dbSchemaManager = new DbSchemaManager($db);

// Ensure table with default name
$dbSchemaManager->ensureTable();

// Ensure table with custom name
$dbSchemaManager->ensureTable('{{%custom_log_table}}');

// Ensure no table with default name
$dbSchemaManager->ensureNoTable();

// Ensure no table with custom name
$dbSchemaManager->ensureNoTable('{{%custom_log_table}}');

General usage

When creating an instance of \Yiisoft\Log\Logger, you must pass an instance of the database connection.

Creating a target:

$dbTarget = new \Yiisoft\Log\Target\Db\DbTarget($db, $table, $levels);
  • $db (\Yiisoft\Db\Connection\ConnectionInterface) - The database connection instance.
  • $table (string) - The name of the database table to store the log messages. Defaults to "{{%yii_log}}".
  • $levels (array) - Optional. The log message levels that this target is interested in. Defaults to empty array (all levels). Example: [\Psr\Log\LogLevel::ERROR, \Psr\Log\LogLevel::WARNING].

Creating a logger:

$logger = new \Yiisoft\Log\Logger([$dbTarget]);

You can filter which log levels are stored in the database by passing the $levels parameter to the constructor:

use Psr\Log\LogLevel;

// Only store ERROR and WARNING level messages
$dbTarget = new \Yiisoft\Log\Target\Db\DbTarget(
 $db,
 '{{%yii_log}}',
 [LogLevel::ERROR, LogLevel::WARNING]
);

Alternatively, you can set levels after instantiation using the setLevels() method:

$dbTarget = new \Yiisoft\Log\Target\Db\DbTarget($db);
$dbTarget->setLevels([LogLevel::ERROR, LogLevel::WARNING]);

You can use multiple databases to store log messages:

/**
 * @var \Yiisoft\Db\Connection\ConnectionInterface $mysqlDb
 * @var \Yiisoft\Db\Connection\ConnectionInterface $sqliteDb
 */

$logger = new \Yiisoft\Log\Logger([
 new \Yiisoft\Log\Target\Db\DbTarget($mysqlDb),
 new \Yiisoft\Log\Target\Db\DbTarget($sqliteDb),
]);

Documentation

For a description of using the logger, see the yiisoft/log package.

If you need help or have a question, the Yii Forum is a good place for that. You may also check out other Yii Community Resources.

License

The Yii Logging Library - DB Target is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.

Maintained by Yii Software.

Support the project

👁 Open Collective

Follow updates

👁 Official website
👁 Twitter
👁 Telegram
👁 Facebook
👁 Slack