alexya-framework / logger
Alexya的Logger
3.0.5
2017-06-05 14:04 UTC
Requires
- php: >=7.0
- alexya-framework/database: >=3.0
- alexya-framework/filesystem: >=3.0
- psr/log: ^1.0
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}
,服务器的名称(localhost
,test.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}
,服务器的名称(localhost
,test.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}
,服务器的名称(localhost
,test.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');