此包已被废弃,不再维护。未建议替代包。

PHP 日志记录器,PSR-3,还有什么吗?

3.0.0 2017-09-19 11:48 UTC

README

Loggr 是 PSR-3 日志记录器实现。

  • 它只是一个日志记录器,所以我没有更多有趣或无趣的话要说。
  • 蛋糕是谎言。

特性

  • 任意数量的代理可以同时记录日志。
  • 不同的代理可以配置在最小和最大级别之间记录日志
  • 消息将自动与上下文格式化
  • 文件代理:将日志写入文件。可以配置为自动轮换文件,在不同的文件中记录不同级别的日志
  • MySQL 代理:将日志记录到 MySQL 数据库。可配置映射到任何现有表。需要 PDO 连接对象
  • HTML 代理:就像文件代理一样,但添加了一些 HTML 格式化,以便在浏览器中查看日志
  • 控制台代理:用于命令行日志,带颜色!
  • 空代理:不执行任何操作。如果你需要将 PSR-3 日志对象传递到库,但不想实际记录任何内容,则很有用

要求

  • PHP 7.0+(应与 PHP 5.4+ 兼容,但不再使用/测试过)
  • 如果将日志记录到文件,则需要可写目录
  • 如果使用 MySQL,则需要 PDO

安装

Composer

{
    "minimum-stability": "dev",
    "require": {
        "alex-robert/loggr": "~3"
    }
}

手动安装

下载源代码并解压到您的项目目录(但谁真的这么做呢?!)

快速指南

使用 Loggr

$Log = new \Loggr\Loggr();

//Add some log Agents
$Log->add_agent(new \Loggr\Agent\File());
$Log->debug('This a debug message', ['Some', 'Context']);

静态日志记录

//Add some log Agents
\Loggr\Log::add_agent(new \Loggr\Agent\File());
\Loggr\Log::add_agent(new \Loggr\Agent\MySQL());

//This will be logged to a File and in Mysql
\Loggr\Log::alert('Things are going verry badly here');
//yes, it's important to give specific context to your logs, like "very" and "badly" here ;p

文件格式化示例

$Fl = new \Loggr\Agent\File();
$Fl->set_path('/tmp/logs/');
$Fl->get_formatter()
        ->set_format(\Loggr\Level::DEBUG, "{level} ::: {time} - {message} {context} \n")
        ->set_format('default', "{level} :: {time} - {message} \n")
        ->set_time_format('Y-m-d h:i:s')
        ->set_microtime(true)
        ->set_context_format('json');

$Fl->info('Hello {whom}', ['whom'=>'World']);

MySQL Loggr 示例

$Ml = new \Loggr\Agent\MySQL();
$Ml->set_connection(new PDO('mysql:host=localhost;dbname=test', 'logger'));
$Ml->set_table_name('logs');

//Bind context and basics ('message', 'level', 'context', 'time') keys to DB columns
$Ml->bind_column_names([
    'time'    => 'created_at',
    'level'   => 'lvl',
    'foo'     => 'bar'
]);

//Will bind "description" key (in the context) to description column
$Ml->bind_column('description');

$Ml->debug('Test', ['description' => 'This is a test.', 'bar' => 'Just inside the context', 'foo' => 'Goes in bar column']);

日志级别

$Fl = new \Loggr\Agent\File();
$Fl->set_min_level(\Loggr\Level::INFO);

//Logged
$Fl->info('Hello world');
$Fl->alert('I have a very important message for you, world');

//Not logged
$Fl->debug('Not logged, level INFO > DEBUG');

通道日志记录

通道是一堆日志代理。它实现了 LoggerInterface,你可以向其中添加多个代理,因此你可以使用通道同时记录到多个支持项。这对于在项目中分离日志用途/环境非常有用,例如有一个名为 api 的通道来跟踪 API 调用,另一个用于 internals_errors,甚至还有一个具有特定日志级别的 dev 通道。通道与静态日志记录或 Loggr 类一起工作。

通道默认为显式:这意味着,当你使用 Loggr 类时,你必须指定要记录到的通道。如果没有指定通道,则日志将通过 add_agent 方法添加的任何代理传递。可以按通道或代理定义日志级别。代理级别是最后应用的。

许可证

MIT