fahl-design/log4php-slack-appender

一个为 maknz/slack 包构建的 log4php appender

1.2.0 2021-11-23 21:47 UTC

README

状态

Dependency Status Latest Stable Version Total Downloads Latest Unstable Version License

Monthly Downloads Daily Downloads

Maintainability Test Coverage

Codacy Badge Codacy Badge

PHP-Eye PHP-Eye

主分支

Build Status StyleCI codecov

开发分支

Build Status StyleCI codecov

描述

此包允许您轻松优雅地将 Slack for PHP 作为 log4php appender 用于您的应用程序。阅读以下说明以进行设置。

需求

PHP >= 7.1

安装

您可以使用 Composer 包管理器安装此包。您可以在项目根目录中运行以下命令进行安装

composer require fahl-design/log4php-slack-appender

然后为要将消息发送到的每个 Slack 团队 创建一个入站 webhook。您需要 webhook URL(s) 以配置此包。

在获取到您的钩子 URL 后,将其添加到配置的端点

XML appender 配置示例

    <log4php:configuration xmlns:log4php="https://logging.apache.ac.cn/log4php/" threshold="all">
        <appender name="appender_slack" class="LoggerAppenderSlack">
            <!-- get endpoint url from https://my.slack.com/services/new/incoming-webhook -->
            <param name="endpoint" value="https://hooks.slack.com/services/XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX" />
            <param name="channel" value="#yourChannel" />
            <param name="username" value="Log4php" />
            <!-- Url or emoji-->
            <param name="icon" value=":do_not_litter:" />
            <!-- flag to allow markdown (default 1) -->
            <param name="allowMarkdown" value="1" />
            <!-- flag to send log message as slack attachment (default 1) -->
            <param name="asAttachment" value="1" />
        </appender>
        <logger name="myLogger">
            <appender_ref ref="appender_slack" />
        </logger>
    </log4php:configuration>

php (config.php) appender 配置示例

<?php 
    declare(strict_types=1);
    
    use WebProject\Log4php\Appender\Settings\Config;
    use WebProject\Log4php\Appender\Slack;
    
    return [
        'rootLogger' => [
            'level'     => 'DEBUG',
            'appenders' => ['slack_appender'],
        ],
        'myLogger' => [
            'appenders' => ['slack_appender'],
        ],
        'appenders' => [
            'slack_appender' => [
                'class'  => Slack::class,
                'params' => [
                    Config::KEY_ENDPOINT                             => 'https://hooks.slack.com/services/XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX',
                    Config::KEY_CHANNEL                              => '#general',
                    Config::KEY_USERNAME                             => 'log4php',
                    Config::KEY_ICON                                 => ':ghost:', // emoji or an icon url
                    Config::KEY_ALLOW_MARKDOWN                       => true,
                    Config::KEY_MARKDOWN_IN_ATTACHMENTS_FIELDS       => [
                        Config::VALUE_MARKDOWN_IN_ATTACHMENTS_PRETEXT,
                        Config::VALUE_MARKDOWN_IN_ATTACHMENTS_TEXT,
                        Config::VALUE_MARKDOWN_IN_ATTACHMENTS_TITLE,
                        Config::VALUE_MARKDOWN_IN_ATTACHMENTS_FIELDS,
                        Config::VALUE_MARKDOWN_IN_ATTACHMENTS_FALLBACK
                    ],
                    Config::KEY_AS_ATTACHMENT                 => true,
                    Config::KEY_LINK_NAMES                    => true,
                    Config::KEY_UNFURL_LINKS                  => false,
                    Config::KEY_UNFURL_MEDIA                  => true,
                    Config::KEY_SET_ICON_BY_LOG_LEVEL         => true,
                    Config::KEY_ADD_LOGGER_TO_MESSAGE         => true
                ]
            ]
        ]
    ];

用法

查看示例(src/examples)

<?php
declare(strict_types=1);
/**
 * This script requires installation as composer package.
 */
require_once __DIR__.'/../../vendor/autoload.php';

try {
    if (!\is_file(__DIR__.'/../resources/config.local.php')) {
        throw new RuntimeException('local config file is missing');
    }

    Logger::configure(include __DIR__.'/../resources/config.local.php');

    Logger::getRootLogger()->fatal('root-logger-fatal-message');
    $logger = Logger::getLogger('myLogger');
    $logger->warn('warn-message @channel *WATTT*');

    $logger = Logger::getLogger('myLogger');
    $logger->debug('debug-message');
    $logger->info('info-message');
    $logger->warn('warn-message @channel *WATTT*');
    $logger->error('error-message');
    $logger->fatal('fatal-message');
} catch (\Throwable $e) {
    \print_r($e->getMessage());
    \print_r($e->getTraceAsString());
    exit(255);
}