Logger 日志收集器
当前Application实例的Logger实例,实现日志的收集。
- 可通过profile.php的logger.path配置日志的本地存储路径 默认本地日志的存储路径为runtime/log。
- 支持本地日志文件存储,和syslog协议远程存储日志,其他协议可自行扩展。
Logger的实例获取
// 支持参数注入和自动注解
// controller/model
/**
* @autowired 自动注入
*/
protected Logger $lang;
/**
* 参数注入
*/
public function __construct(Logger $logger)
{
...
}
/**
* @autowired 自动注入
*/
public function logger(Logger $logger)
{
...
}
// 也可通过别名调用
public function getLoggerByAlias(ContainerInterface $container)
{
return $container->get('app.log');
}
Logger 的使用
$logger->write($id, $message, $priority);
Logger 在Application内的实例化
通过Application中的容器定义源 Tiny\MVC\Application\ApplicationProvider自动加载入容器。
/**
* 获取日志生成器的容器定义
*
* @return void|\Tiny\DI\Definition\CallableDefinition
*/
protected function getLoggerDefinition()
{
// 配置是否开启日志收集器
$config = (array)$this->properties['log'];
if (!$config['enabled']) {
return;
}
return new CallableDefinition(Logger::class, function (array $config) {
// 加载日志驱动
foreach ((array)$config['drivers'] as $type => $className) {
Logger::regLogWriter($type, $className);
}
// 创建实例
$logger = new Logger();
// 文件型日志写入器的配置
$writerConfig = ('file' === $config['writer']) ? [
'path' => $config['path'],
] : [];
// 添加日志写入器
$logger->addLogWriter($config['writer'], $writerConfig);
return $logger;
}, ['config' => $config]);
}
Logger 在profile.php内的配置项
/**
* application的日志配置
*
* log.enabled 开启日志处理
*
* log.wirter 日志写入器
* file 写入到本地文件
* syslog 通过系统syslog函数写入到系统文件夹
* rsyslog 通过rsyslog协议,写入到远程文件夹
*/
$profile['log']['enabled'] = true;
$profile['log']['writer'] = 'file'; /*默认可以设置file|syslog 设置类型为file时,需要设置log.path为可写目录路径 */
$profile['log']['path'] = '{runtime}/log/';