swayok / laravel-extended-errors
Laravel 日志扩展器,用于将日志和异常以 HTML 格式渲染,存储到文件或通过电子邮件和 Telegram 发送
Requires
- php: >=8.1
- laravel/framework: >=10.0
- telegram-bot/api: ^2.3.15
Requires (Dev)
- filp/whoops: ^2.15.1
README
此软件包为 Laravel 日志系统提供额外的驱动程序(Telegram 和电子邮件)和日志渲染器。渲染器生成 HTML 代码,写入日志文件或发送到外部服务(Slack、电子邮件、Telegram)。
日志示例: screenshot_log.png
异常日志示例: screenshot_exception.png
1. 安装
Laravel <= 5.5
将 require 添加到 composer.json
并运行 composer update
"require": {
"swayok/laravel-extended-errors": "5.5.*",
}
在分支 laravel_up_to_5.5 中使用第 2 步
Laravel 5.6+ 到 Laravel 9
将 require 添加到 composer.json
并运行 composer update
"require": {
"swayok/laravel-extended-errors": ":6.0",
}
Laravel 10+
将 require 添加到 composer.json
并运行 composer update
"require": {
"swayok/laravel-extended-errors": ":7.0",
}
配置
服务提供者
自动通过包自动发现添加。
渲染器
HTML 渲染器注入到 daily
和 single
通道驱动程序
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.html'),
'tap' => [\LaravelExtendedErrors\Formatter\HtmlFormatter::class],
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.html'),
'level' => 'debug',
'days' => 7,
'tap' => [\LaravelExtendedErrors\Formatter\HtmlFormatter::class],
],
驱动程序
所有更改将应用于 config/logging.php
中的 'channels'
数组。
Telegram 通道
'telegram' => [
'driver' => 'telegram',
'token' => env('LOG_TELEGRAM_API_KEY'),
'chat_id' => env('LOG_TELEGRAM_CHAT_ID'),
'proxy' => [
'type' => env('LOG_TELEGRAM_PROXY_TYPE', 'http'),
'host' => env('LOG_TELEGRAM_PROXY_HOST'),
'port' => env('LOG_TELEGRAM_PROXY_PORT'),
'user' => env('LOG_TELEGRAM_PROXY_USER'),
'password' => env('LOG_TELEGRAM_PROXY_PASSWORD'),
],
'level' => 'debug',
'bubble' => false',
]
渲染的日志和异常作为文档发送到提供的 chat_id
代理设置
proxy.type
可以是:http
、socks4
、socks5
、nginx
proxy.user
和proxy.password
可以留空,如果代理没有授权proxy.host
对于http
、socks4
和socks5
类型通常是 IP 地址,如192.168.1.1
proxy.host
对于nginx
类型应该是完整的 URL,如http://bot.yourdomain.com
、https://bot.yourdomain.com
或http://bot.yourdomain.com:8080
;proxy.port
对于此类型不使用;
代理使用基本认证方法发送用户名和密码。目前不支持其他认证方法。如果有需要,请创建一个问题(确保 CURL 支持)。
Nginx vhost 配置以代理请求到 api.telegram.org
server {
listen 80;
server_name bot.yourdomain.com;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://api.telegram.org/;
client_max_body_size 100M;
}
}
电子邮件通道(可能不会与 Laravel 10+ 一起工作)
'email' => [
'driver' => 'email',
'level' => 'debug',
'subject' => 'Server log',
'sender' => 'local@test.lh',
'receiver' => ['your@email.com'],
'bubble' => false',
],
警告:没有对异常的限制,如果在高负载项目中使用此通道,最终可能会一次性获得数千个错误。
Sentry
实际上没有 Sentry 的通道驱动程序,但这里有一个快速教程,介绍如何通过 Handler.php 将异常报告添加到 Sentry。
要求 Sentry 包
"require": {
"sentry/sentry": "^1.8",
"sentry/sentry-laravel": "^0.8.0",
}
在您的 app/Exception/Handler.php
中更新 report()
方法,如下所示
public function report(Exception $exception) {
if ($this->shouldReport($exception) && app()->bound('sentry')) {
app('sentry')->captureException($exception, ['extra' => \LaravelExtendedErrors\Utils::getMoreInformationAboutRequest()]);
}
parent::report($exception);
}
将 Sentry 创建新项目时提供的 URL 添加到 .env
文件。它看起来像这样
SENTRY_DSN=https://8158bc7a6110...e7b152b@sentry.domain.com/1
请注意,使用 'extra'
键将报告发送到 Sentry。此键存储当前请求的所有数据,就像由 HTML 渲染器生成的异常日志一样。这提供了对发生事件的更好理解。
Whoops 异常页面替换
要使用此软件包渲染的异常页面替换 Laravel 内置的 Whoops 处理器渲染的 HTML 异常页面,您需要将 'replace_whoops' => true,
添加到 config/logging.php
自定义用户信息收集器
ExceptionHtmlRenderer
打印最小集用户信息:主键和类。要打印更多信息,您可以使用 ExceptionHtmlRenderer::setUserInfoCollector(\Closure)
提供您自己的用户信息收集器。闭包
不接受任何参数,必须返回null(未认证)或数组。此外,获取用户对象的方式取决于您。默认情况下,ExceptionHtmlRenderer
使用 request()->user()
;