在我的laravel应用程序中,需要将需要发送的消息格式化为松弛状态。因此,我将一个松弛日志通道设置为config/logging.php
:
'slack' => [
'driver' => 'slack',
'url' => /*Censored Hook URL*/,
'username' => 'MyApp',
'emoji' => ':gear:',
'level' => 'debug',
],
也可以在documentation上看到,我可以做一个monolog格式化程序,因此我做了以下工作:
namespace App\Logging;
class SlackLogFormatter
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
foreach ($logger->getHandlers() as $handler) {
$handler->setFormatter(...);
}
}
}
并且将其指定为点击进入我的日志:
'slack' => [
'driver' => 'slack',
'tap' => [App\Logging\SlackLogFormatter::class]
'url' => /*Censored Hook URL*/,
'username' => 'MyApp',
'emoji' => ':gear:',
'level' => 'debug',
],
但是在我的格式化程序中,我在哪里处理日志条目本身?我的意思是:
$handler->setFormatter
似乎不是\Illuminate\Log\Logger
类的方法。
我无法找出需要提供自定义格式的方法。我的意思是我有invoke方法,那之后呢?
松弛的格式化程序应为以下内容:
namespace App\Logging;
use Monolog\Formatter\LineFormatter;
class SlackLogFormatter
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof SlackWebhookHandler) {
$format=""; // Look on the Monolog's Line formatter documentation
$formatter= new LineFormatter($format,"Y-m-d H:i:s");
$handler->pushProcessor(function ($record) {
//Append extra info of formatting here
});
$handler->setFormatter($formatter);
}
}
}
}
并且配置松弛部分以使格式化程序不发送附件必需的内容:
'slack' => [
'driver' => 'slack',
'tap' => [App\Logging\SlackLogFormatter::class]
'url' => /*Censored Hook URL*/,
'username' => 'MyApp',
'emoji' => ':gear:',
'level' => 'debug',
'attachment' => FALSE,
],
setFormatter
方法采用了新的Monolog Formatter,如https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#formatters
也pushProcessor
允许您在消息中填充其他字段,例如。在您的日志消息上显示表情符号:
public function __invoke($logger)
{
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof SlackWebhookHandler) {
$format="%emoji% %message%";
$formatter= new LineFormatter($format,"Y-m-d H:i:s");
$handler->pushProcessor(function ($record) {
$record['emoji']=":poop:";
});
$handler->setFormatter($formatter);
}
}
}