Alexya的Logger

安装: 59

依赖: 1

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:框架

3.0.5 2017-06-05 14:04 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:13 UTC


README

Alexya的日志组件

内容

抽象日志器

\Alexya\Logger\AbstractLogger 是所有不同日志器的基类。它是检查哪些消息可以被记录并格式化它们的类。

其构造函数接受以下参数

  • 一个字符串,表示每个日志消息的格式。
  • 一个数组,包含日志器可以记录的日志级别。

字符串参数可以包含用于格式化消息的占位符,这些是可用的占位符

  • {YEAR},当前年份。
  • {MONTH},当前月份。
  • {DAY},当前日期。
  • {HOUR},当前小时。
  • {MINUTE},当前分钟。
  • {SECOND},当前秒。
  • {SERVER_NAME},服务器的名称(localhosttest.com...)。
  • {CALLING_FUNCTION},调用日志器的函数。
  • {CALLING_FILE},调用日志器的文件。
  • {CALLING_LINE},调用日志器的行。
  • {CALLING_CLASS},调用日志器的类。
  • {CALLING_TYPE}-> 如果日志器由对象调用,:: 如果它被静态调用。
  • {LEVEL},日志被调用的级别。
  • {LOG},要记录的字符串。

如果字符串为空,日志器将使用 [{HOUR}:{MINUTE}] ({LEVEL}) {LOG} 作为格式。

数组参数包含日志器可以记录的级别,如果它为空,它将记录所有级别。以下是支持的水平

  • 紧急
  • 警报
  • 临界
  • 错误
  • 警告
  • 通知
  • 信息
  • 调试

\Psr\Log\LogLevel 包含所有级别的常量定义。

log 方法首先检查日志消息是否可以记录,然后格式化它(如果可以记录),它接受三个参数

  • 一个字符串,表示消息应记录的级别。
  • 一个字符串,表示要记录的消息(可以包含占位符)。
  • 一个包含自定义占位符的数组。

如果级别不是 \Psr\Log\LogLevel 中定义的任何常数,它将抛出类型为 \Psr\Log\InvalidArgumentException 的异常。

所有扩展此类的新类都必须实现 _write 方法,该方法将日志消息写入子类想要写入的地方。它接受格式化的消息和一个占位符数组作为参数

<?php
namespace Test;

use \Alexya\Logger\AbstractLogger;

/**
 * Simple logger that echoes each log entry
 */
class Logger extends AbstractLogger
{
    protected function _write($message, $placeholders)
    {
        echo $message;
    }
}

文件日志器

\Alexya\Logger\File 将每个日志消息输出到一个文件中。

构造函数接受四个参数

  • 表示将保存日志文件的路径的 \Alexya\FileSystem\File 对象。
  • 一个字符串,表示每个日志文件名的格式,你可以添加以下占位符
  • 一个字符串,表示每个日志条目的格式。
  • 一个包含将被记录的元素的数组,你可以在类 \Psr\Log\LogLevel 中找到完整的可用值列表。

文件名格式可以包含以下占位符

  • {YEAR},当前年份。
  • {MONTH},当前月份。
  • {DAY},当前日期。
  • {HOUR},当前小时。
  • {MINUTE},当前分钟。
  • {SECOND},当前秒。
  • {SERVER_NAME},服务器的名称(localhosttest.com...)。

如果在记录消息时文件不存在,它将被创建。

<?php
$Logger = new \Alexya\Logger\File(
    new \Alexya\FileSystem\Direcctory("/tmp/log/Alexya"),
    "{YEAR}-{MONTH}-{DAY}.log",
    "[{HOUR}:{MINUTE}] ({LEVEL}) {LOG}",
    [
        \Psr\Log\LogLevel::EMERGENCY,
        \Psr\Log\LogLevel::ALERT,
        \Psr\Log\LogLevel::CRITICAL,
        \Psr\Log\LogLevel::ERROR,
        \Psr\Log\LogLevel::WARNING,
        \Psr\Log\LogLevel::NOTICE,
        \Psr\Log\LogLevel::INFO,
        \Psr\Log\LogLevel::DEBUG
    ]
);

$Logger->debug("test"); // [00:00] (debug) test
$Logger->info("[{HOUR}:{MINUTE}] ({LEVEL}) {CUSTOM_PLACEHOLDER}", [
    "CUSTOM_PLACEHOLDER" => "test"
]); // [00:00] (debug) test

数据库日志器

\Alexya\Logger\Database 将每个日志消息存储在数据库表中。

构造函数接受五个参数

  • 用于与数据库交互的 \Alexya\Database\Connection 对象。
  • 字符串表示表名。
  • 包含列和要插入的值的关联数组。
  • 一个字符串,表示每个日志条目的格式。
  • 一个包含将被记录的元素的数组,你可以在类 \Psr\Log\LogLevel 中找到完整的可用值列表。

列数组和格式字符串都可以接受以下占位符

  • {YEAR},当前年份。
  • {MONTH},当前月份。
  • {DAY},当前日期。
  • {HOUR},当前小时。
  • {MINUTE},当前分钟。
  • {SECOND},当前秒。
  • {SERVER_NAME},服务器的名称(localhosttest.com...)。
  • {CALLING_FUNCTION},调用日志器的函数。
  • {CALLING_FILE},调用日志器的文件。
  • {CALLING_LINE},调用日志器的行。
  • {CALLING_CLASS},调用日志器的类。
  • {CALLING_TYPE}-> 如果日志器由对象调用,:: 如果它被静态调用。
  • {LEVEL},日志被调用的级别。
  • {LOG},要记录的字符串。
<?php
$Logger = new \Alexya\Logger\Database(
    $Database,
    "logs",
    [
        "date"    => "{YEAR}-{MONTH}-{DAY} {HOUR}:{MINUTE}:{SECOND}",
        "caller"  => "{CALLER_CLASS}{CALLER_TYPE}{CALLER_FUNCTION} ({CALLER_FILE}:{CALLER_LINE})",
        "level"   => "{LEVEL}",
        "message" => "{LOG}"
    ],
    [
        \Psr\Log\LogLevel::EMERGENCY,
        \Psr\Log\LogLevel::ALERT,
        \Psr\Log\LogLevel::CRITICAL,
        \Psr\Log\LogLevel::ERROR,
        \Psr\Log\LogLevel::WARNING,
        \Psr\Log\LogLevel::NOTICE,
        \Psr\Log\LogLevel::INFO,
        \Psr\Log\LogLevel::DEBUG
    ]
);

$Logger->debug("test"); // INSERT INTO `logs` (`date`, `caller`, `level`, `message`) VALUES ('0000-00-00 00:00:00', '', 'debug', 'test');
$Logger->info("test", [
    "date"    => "{HOUR}:{MINUTE}:{SECOND}",
    "caller"  => "{CALLER_CLASS}{CALLER_TYPE}{CALLER_FUNCTION} ({CALLER_FILE}:{CALLER_LINE})",
    "level"   => "{LEVEL}",
    "message" => "{LOG}"
]); // INSERT INTO `logs` (`date`, `caller`, `level`, `message`) VALUES ('00:00:00', '', 'debug', 'test');