dan-d-martin/logger-aware

简单透明地为一个类添加日志记录器支持

1.1.0 2022-04-06 13:51 UTC

This package is auto-updated.

Last update: 2024-09-06 19:02:51 UTC


README

介绍

LoggerAware 库提供了两样东西:一个 LoggerAware 特性,它为类添加日志记录器支持,以及一个 NullLogger 类,它允许日志记录器支持是可选的。

这个库旨在解决的问题是以尽可能轻量级和透明的方式为一个类添加日志记录支持的问题。最佳实践规定,任何需要它的类都应该注入一个 Logger 服务,但这样做意味着需要向类中添加代码,这些代码并不贡献于类的行为(日志记录应该是一种可选行为;它不是大多数类所需的功能),此外,如果日志记录器的注入是可选的,则执行日志记录的类必须每次想要记录时都检查是否实际存在日志记录器。这增加了额外的开销。

这个库通过一个特性将此代码抽象出来,该特性可以被添加到任何需要日志记录器的类中。该特性提供了一个 setLogger() 方法,允许注入一个日志记录器,以及一个 getLogger() 方法,通过该方法类可以获取日志记录器。如果没有注入日志记录器,将提供一个 NullLogger,它提供了所有日志记录方法但不执行任何操作。这允许类确定它们可以调用日志记录方法。

使用方法

将特性添加到类中即可为类添加日志记录器支持

use DanDMartin\LoggerAware\Traits\LoggerAware;

class MyClass
{
	use LoggerAware;

	public function doSomething()
	{
		$this->getLogger()->info('Doing something');
		// do something...
	}
}

现在,如果可用日志记录器,MyClass 将使用它来写入日志消息。默认情况下,将使用 NullLogger,并且不会发生任何操作,但注入不同日志记录器是简单的事情

$myClass = new MyClass();
$logger = new \Monolog\Logger('logger');

$myClass->setLogger($logger);
$myClass->doSomething();

现在所有日志记录将由注入的日志记录器执行。