官术网_书友最值得收藏!

Our own logger channel

I mentioned earlier how we can define our own logger channel so that we don't have to always inject the entire factory. So, let's take a look at how to create one for the Hello World module we're now writing.

Most of the time, all we have to do is add such a definition to the services definition file:

hello_world.logger.channel.hello_world:
parent: logger.channel_base
arguments: ['hello_world']

Before talking about the actual logger channel, let's see what this weird service definition actually means, because this is not something we've seen before. I mean, where's the class?

The parent key means that our service will inherit the definition from another service. In our case, the parent key is logger.channel_base, and this means that the class used will be Drupal\Core\Logger\LoggerChannel (the default). If we look closely at the logger.channel_base service definition in core.services.yml, we also see a factory key. This means that this service class is not being instantiated by the service container but by another service, namely the logger.factory service's get() method.

The arguments key is also slightly different. First of all, we don't have the @ sign. That is because this sign is used to denote a service name, whereas our argument is a simple string. As a bonus tidbit, if the string is preceded and followed by a %, it denotes a parameter that can be defined in any *.services.yml file.

Getting back to our example then, if you remember the logger theory, this service definition will mean that requesting this service will perform, under the hood, the following task:

\Drupal::service('logger.factory')->get('hello_world'); 

It uses the logger factory to load a channel with a certain argument. So, now we can inject our hello_world.logger.channel.hello_world service and call any of the LoggerInterface methods on it directly in our client code.

主站蜘蛛池模板: 喀喇沁旗| 望江县| 杭州市| 隆昌县| 丰都县| 新建县| 元氏县| 怀集县| 栾城县| 莱州市| 马关县| 石楼县| 长丰县| 秀山| 休宁县| 当涂县| 怀远县| 讷河市| 仙居县| 双辽市| 驻马店市| 中方县| 咸宁市| 龙山县| 淮滨县| 佛山市| 岱山县| 鹤峰县| 阳山县| 崇明县| 拜泉县| 布尔津县| 轮台县| 嵩明县| 郓城县| 西峡县| 彰武县| 馆陶县| 青海省| 陕西省| 项城市|