naucon/logger

此包包含一个简单的PHP日志类,用于处理一个或多个PSR-3兼容的日志记录器。

1.0.0 2015-08-24 08:52 UTC

This package is auto-updated.

Last update: 2024-08-29 03:26:15 UTC


README

关于

此包包含一个简单的PHP日志类,用于处理一个或多个PSR-3兼容的日志记录器。

特性

  • logger
    • 处理一个或多个日志记录器
    • 日志级别
      • EMERGENCY
      • ALERT
      • CRITICAL
      • ERROR
      • WARNING
      • NOTICE
      • INFO
      • DEBUG
    • 消息
      • 带有上下文
      • 将异常作为消息传递
    • PSR-3 兼容
  • 处理器
    • 空处理器
      • 不记录任何日志
    • 标准处理器(StdHandler)
      • 日志文件
      • 限制日志级别
      • 异常堆栈跟踪
    • 标准错误处理器(StderrHandler)
      • 写入PHP错误日志
      • 限制日志级别
      • 异常堆栈跟踪
    • 日志处理器(LogHandler)
      • 日志文件
      • 限制日志级别
      • 包含持续时间
      • 包含IP地址(当前用户IP)
      • 包含用户ID(从外部设置)
      • 异常堆栈跟踪
    • gelf处理器
      • 将消息推送到GrayLog2服务器
  • 单例类(应用范围)

兼容性

  • PHP5.3

安装

通过Composer安装最新版本

composer require naucon/logger

基本用法

Logger(带StdHandler)

要实现日志记录器,请创建一个Logger实例。

use Naucon\Logger\Logger;
$loggerObject = new Logger();

将处理器添加到日志记录器中,以定义日志消息的写入位置。在我们的示例中,我们使用StdHandler将消息记录到文件中。

$logPath = __DIR__ . '/log/test.log';

use Naucon\Logger\Handler\StdHandler;
$logHandler = new StdHandler($logPath);

$loggerObject->addHandler($logHandler);

处理器也可以限制为某个日志级别。

use Naucon\Logger\LogLevel;
use Naucon\Logger\Handler\StdHandler;
$logHandler = new StdHandler(LogLevel::WARNING);

日志记录器类提供了以下方法来记录消息

  • emergency($message, array $context=array());
  • alert($message, array $context=array());
  • critical($message, array $context=array());
  • error($message, array $context=array());
  • warning($message, array $context=array());
  • notice($message, array $context=array());
  • info($message, array $context=array());
  • debug($message, array $context=array());

日志消息通过$message传递。可以通过$context添加上下文数据。

$loggerObject->emergency('message of level emergency');
$loggerObject->alert('message of level alert');
$loggerObject->critical('message of level critical');
$loggerObject->error('message of level error');
$loggerObject->warning('message of level warning');
$loggerObject->notice('message of level notice');
$loggerObject->info('message of level info');
$loggerObject->debug('message of level debug');

日志文件可能如下所示

[01-Jul-2012 15:54:25 Europe/Paris] PHP emergency: message of level emergency with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP alert: message of level alert with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP critical: message of level critical with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP alert: message of level alert with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP error: message of level error with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP warning: message of level warning with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP notice: message of level notice with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP info: message of level info with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP debug: message of level debug with context: Bob

日志消息可以包含占位符{user},这些占位符可以用$context中的值替换。

$loggerObject->emergency('message of level emergency with context: {user}', array('user' => 'Bob'));

如果对象实现了__toString()方法,则可以将对象作为消息传递。

$loggerObject->critical(new \Exception('invalid foo'));

记录异常是一种常见模式,因为它允许记录堆栈跟踪。因此,必须将Exception实例作为具有键exception$context传递。

$exception = new \Exception('invalid foo');
$loggerObject->error($exception->getMessage(), array('exception' => $exception));

标准错误处理器(StderrHandler)

日志记录器包包含一个标准错误处理器,用于写入PHP错误日志。

要使用处理器,请创建一个StderrHandler实例并将其添加到Logger

use Naucon\Logger\Handler\StderrHandler;
$logHandler = new StderrHandler();

处理器也可以限制为某个日志级别。

use Naucon\Logger\LogLevel;
use Naucon\Logger\Handler\StderrHandler;
$logHandler = new StderrHandler(LogLevel::WARNING);

日志文件可能如下所示

[01-Jul-2012 15:54:25 Europe/Paris] PHP emergency: message of level emergency with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP alert: message of level alert with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP critical: message of level critical with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP alert: message of level alert with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP error: message of level error with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP warning: message of level warning with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP notice: message of level notice with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP info: message of level info with context: Bob
[01-Jul-2012 15:54:25 Europe/Paris] PHP debug: message of level debug with context: Bob

日志处理器(LogHandler)

日志记录器包包含一个具有其他日志格式和额外数据的处理器

    * duration
    * IP-Address (current user IP)
    * User ID (set from outside)

要使用处理器,请创建一个LogHandler实例并将其添加到Logger

$logPath = __DIR__ . '/log/test.log';

use Naucon\Logger\Handler\LogHandler;
$logHandler = new LogHandler($logPath);

处理器也可以限制为某个日志级别。

use Naucon\Logger\LogLevel;
use Naucon\Logger\Handler\LogHandler;
$logHandler = new LogHandler($logPath, LogLevel::WARNING);

日志文件可能如下所示

2010-02-07 19:28:43  0           EMERGENCY [127.0.0.1]         unkown     message of level emergency
2010-02-07 19:28:43  0.001       ALERT     [127.0.0.1]         unkown     message of level alert
2011-10-08 22:26:09  0.001       CRITICA   [127.0.0.1]         unkown     message of level critical
2011-10-08 22:26:09  0.001       ERROR     [127.0.0.1]         unkown     message of level error
2011-10-08 22:26:09  0.001       WARNING   [127.0.0.1]         unkown     message of level warning
2011-10-08 22:26:09  0.001       NOTICE    [127.0.0.1]         unkown     message of level notice
2011-10-08 22:26:09  0.001       INFO      [127.0.0.1]         unkown     message of level info
2011-10-08 22:26:09  0.001       DEBUG     [127.0.0.1]         unkown     message of level debug

Gelf处理器

日志记录器包包含一个处理器,用于将GELF消息推送到GrayLog2服务器。

首先将graylog2/gelf-php包添加到您的composer.json

"require": {
    "graylog2/gelf-php" : "~1.0"
}

然后创建Gelf Transporter和Gelf Publisher。

$transport = new Gelf\Transport\UdpTransport("127.0.0.1", 12201, Gelf\Transport\UdpTransport::CHUNK_SIZE_LAN);
$publisher = new Gelf\Publisher($transport);

之后创建一个GelfHandler实例并将其添加到Logger

use Naucon\Logger\Handler\GelfHandler;
$logHandler = new GelfHandler($publisher, 'www.nclib.dev', 'example-facility');

GelfHandle也可以限制为某个日志级别。

use Naucon\Logger\LogLevel;
use Naucon\Logger\Handler\GelfHandler;
$logHandler = new GelfHandler($publisher, 'www.nclib.dev', 'example-facility', LogLevel::WARNING);

从版本1.0开始,graylog2/gelf-php包自带了其自己的日志记录器。此PSR-3兼容的日志记录器可以作为处理器添加到我们的Logger

use Naucon\Logger\Logger;
$loggerObject = new Logger();
$loggerObject->addHandler(new Gelf\Logger());

$loggerObject->emergency('message of level emergency');

日志管理器

本地包包含一个具有单例模式的LoggerManager类,以便可以从应用程序的任何位置访问Logger实例。

除了单例类之外,您还可以使用服务容器。

通过调用静态方法 init() 创建一个 LoggerManager 实例。将一个 Logger 实例作为参数附加到方法 init() 上。

$logPath = __DIR__ . '/log/test2.log';

use Naucon\Logger\Logger;
$loggerObject = new Logger();

use Naucon\Logger\Handler\LogHandler;
$logHandler = new LogHandler($logPath);
$loggerObject->addHandler($logHandler);

use Naucon\Logger\LoggerManager;
LoggerManager::init($loggerObject);

要写入系统日志文件,我们调用已知的静态方法

LoggerManager::emergency('message of level emergency');
LoggerManager::alert('message of level alert');
LoggerManager::critical('message of level critical');
LoggerManager::alert('message of level alert');
LoggerManager::error('message of level error');
LoggerManager::warning('message of level warning');
LoggerManager::notice('message of level notice');
LoggerManager::info('message of level info');
LoggerManager::debug('message of level debug');

许可协议

MIT 许可协议 (MIT)

版权所有 (c) 2015 Sven Sanzenbacher

特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人,免费使用该软件的权利,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供者提供软件的人进行此类操作,前提是遵守以下条件

上述版权声明和本许可协议应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论这些责任是合同、侵权或其他方式,源于、因之而起或与此软件或软件的使用或其他交易有关。