phossa2/logger

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

PHP的PSR-3兼容日志库

2.0.1 2016-07-22 05:58 UTC

This package is not auto-updated.

Last update: 2020-01-22 03:52:01 UTC


README

请使用 phoole/logger 库代替

Build Status Code Quality Code Climate PHP 7 ready HHVM Latest Stable Version License

phossa2/logger 是一个符合 PSR-3 的日志库。它是 Monolog 的重写,并做了一些修改。

它需要 PHP 5.4,支持 PHP 7.0+ 和 HHVM。它符合 PSR-1PSR-2PSR-3PSR-4,以及提议的 PSR-5

安装

通过 composer 工具安装。

composer require "phossa2/logger=2.*"

或者将以下行添加到您的 composer.json

{
    "require": {
       "phossa2/logger": "2.*"
    }
}

使用

使用默认通道创建日志实例,

use Phossa2\Logger\Logger;
use Phossa2\Logger\Handler\SyslogHandler;
use Phossa2\Logger\Handler\LogfileHandler;
use Phossa2\Logger\Processor\MemoryProcessor;
use Phossa2\Logger\Processor\InterpolateProcessor;

// with default channel
$logger = new Logger('MyApp');

// attach memory processor
$logger->addProcessor(new MemoryProcessor());

// attach interpolate processor to all channels' ('*') end (-100)
$logger->addProcessor(new InterpolateProcessor(), '*', -100);

// attach syslog handler to user related channels
$logger->addHandler('debug', new SyslogHandler(), 'user.*');

// attach file handler to all channels
$logger->addHandler('warning', new LogfileHandler('/tmp/app.log'));

// log to system.usage channel
$logger
    ->with('system.usage')
    ->debug('memory used {memory.used} and peak is {memory.peak}');

// log to user.login channel
$logger
    ->with('user.login')
    ->info('user logged in as {user.username}', ['user' => $user]);

// log to default channel
$logger->debug('a test message');

特性

  • 通道

    通道的创造性使用。现在 HandlerProcessor 可以绑定到不同的通道,也可以使用通道名称globbing。

    • 通道globbing

      默认情况下,处理器和处理器绑定到 '*' 通道,它匹配所有。但它们也可以绑定到如 'user.*' 或更具体的 'user.login' 通道。

      // bind to 'user.*' channels
      $logger->addHandler('warning', new LogfileHandler('/log/user.log'), 'user.*');
      
      // bind to 'system.*' channels
      $logger->addHandler('error', new LogfileHandler('/log/system.log'), 'system.*');
      
      // add user info only in 'user.*' channel
      $logger->addProcessor(new UserProcessor(), 'user.*');

      可以通过在任意日志相关方法前使用 with() 来向特定通道发送日志消息,如 log()warning() 等。

      $logger->with('user.login')->info('user {user.username} logged info');

      前一个代码中的 info() 方法将触发通过 UserProcessor 插入到上下文数组中的用户信息并被记录到文件 /log/user.log

      注意:通道名称不区分大小写。

      注意:相同的处理器或处理器可以绑定到不同的通道。但在一个日志调用中只会执行一次。

    • 单个日志记录器

      由于支持向不同通道记录,因此在一个应用程序中不需要创建多个日志记录器。通过精心设计您的通道层次结构,您可能在整个网站上使用一个日志记录器。

  • 优先级

    现在可以将处理器和处理器注入到日志记录器中,带有不同的优先级(范围从 -100100,默认为 0)。

    • 更高的优先级意味着先执行

      // add user info at first
      $logger->addProcessor(new UserProcessor(), 'user.*', 100);
      
      // interpolate should be done last (just before executing handlers)
      $logger->addProcessor(new InterpolateProcessor(), '*', -100);
    • 相同优先级的第一个先执行(执行)

      默认优先级值为 0。以下处理器按照添加的顺序执行。

      // log to file first
      $logger->addHandler('debug', new LogfileHandler('/log/log.txt'));
      
      // then log to mail
      $logger->addHandler('debug', new MailHandler('[email protected]'));
  • 简单可调用接口

    处理器、格式化程序、处理器现在都使用单个接口

    public function __invoke(LogEntryInterface $logEntry);

    这意味着,用户可以使用预定义的函数或其他可调用对象作为处理器、格式化程序或处理器,只要这些可调用对象接受 LogEntryInterface 作为参数。

    以下是一个快速处理器示例,

    function myHandler(LogEntryInterface $logEntry) {
        // get formatted message
        $formatted = $logEntry->getFormatted();
    
        // write to my device ...
    }

    或者甚至是,

    $logger->addHandler('error', function($log) {
        // write the log to my device
    }, 'user.*');
  • 日志条目

    不再使用数组作为日志消息的数据类型。定义了LogEntryInterface作为日志的默认数据类型。

    您甚至可以扩展LogEntry类,并在您的日志记录器中使用它

    class MyLogEntry extends LogEntry
    {
        // ...
    }

    将其作为所有日志消息的原型在您的日志记录器中使用

    $entryPrototype = new MyLogEntry('channel','debug', 'message');
    
    $logger = new Logger('MyApp', $entryPrototype);

APIs

  • LoggerInterface相关的

    有关相关API的标准,请参阅PSR-3

  • Phossa2\Logger\Logger相关的

    • __construct(string $defaultChannel = 'LOGGER', LogEntryInterface $logPrototype = null)

      创建日志记录器。

    • with(string $channel): $this

      指定即将到来的日志方法的通道。

    • addHandler(string $level, callable $handler, string $channel = '*', int $priority = 0): $this

      以优先级添加一个处理程序到指定的通道。

    • addProcessor(callable $processor, string $channel = '*', int $priority = 0): $this

      以优先级添加一个处理程序到指定的通道。

    • removeHandler(callable|string $handlerOrClassname, $channel = '')

      从指定通道删除处理程序(或指定处理程序的类名)。如果$channel为空,则从所有通道中删除。

    • removeProcessor(callable|string $processorOrClassname, $channel = '')

      从指定通道删除处理程序(或指定处理程序的类名)。如果$channel为空,则从所有通道中删除。

变更日志

有关更多信息,请参阅CHANGELOG

测试

$ composer test

贡献

有关更多信息,请参阅CONTRIBUTE

依赖

  • PHP >= 5.4.0

  • phossa2/shared >= 2.0.21

许可

MIT许可