yapro / monolog2db
该软件包的最新版本(dev-main)没有可用的许可信息。
处理器将日志记录写入数据库
dev-main
2022-08-19 03:59 UTC
Requires
- php: >=7.4
- doctrine/dbal: *
- monolog/monolog: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-21 08:18:04 UTC
README
处理器将日志记录写入数据库
如果你的数据库宕机,或者你的应用有错误的数据库密码
- LogRecordHandler 将不会向你的数据库写入
- LogRecordHandler 将将错误日志写入 LOG_FILE_FOR_UNEXPECTED_ERRORS=/your/file.log
安装
注册环境变量
MYSQL_VERSION=8 MYSQL_HOST=mysql MYSQL_PORT=3306 MYSQL_DATABASE=database_name MYSQL_USERNAME=database_username MYSQL_PASSWORD=database_password MYSQL_TABLE_OPTIONALLY=system_log LOG_FILE_FOR_UNEXPECTED_ERRORS=php://stderr
注册日志处理器
services: YaPro\Monolog2db\LogRecordHandler: arguments: - '%env(MYSQL_HOST)%' - '%env(MYSQL_PORT)%' - '%env(MYSQL_DATABASE)%' - '%env(MYSQL_USERNAME)%' - '%env(MYSQL_PASSWORD)%' - '%env(LOG_FILE_FOR_UNEXPECTED_ERRORS)%' - '%env(MYSQL_TABLE_OPTIONALLY)%'
配置 monolog(例如,从文件 config/packages/prod/monolog.yaml)
monolog: handlers: main: type: service id: YaPro\Monolog2db\LogRecordHandler console: type: console process_psr_3_messages: false channels: ["!event", "!doctrine"]
准备数据库模式
CREATE TABLE system_log ( id INT AUTO_INCREMENT NOT NULL, project_name varchar(255) not null, source_name varchar(255) not null, level_name varchar(255) not null, message TEXT not null, datetime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, http_request_id varchar(255) not null, channel varchar(255) not null, context LONGTEXT not null, extra LONGTEXT not null, PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB;
为了使 doctrine 忽略 system_log 表,需要指定它
doctrine: dbal: default_connection: connection_mysql connections: connection_mysql: # игнорируем таблицы начинающиеся с префикса monolog https://symfony.com.cn/bundles/DoctrineMigrationsBundle/current/index.html#manual-tables schema_filter: ~^(?!system_log)~ # для нескольких таблиц попробовать: ~^(?!(monolog|sessions))~ # альтернатива: app/console doctrine:migrations:diff --filter-expression=/^prefix_/
并且在启动迁移之前不要忘记删除该表
# create db schemes: bin/console doctrine:schema:drop --full-database --force -v bin/console dbal:run-sql "drop table if exists system_log;" bin/console doctrine:migrations:migrate --no-interaction -v
测试
docker build -t yapro/monolog2db:latest -f ./Dockerfile ./ docker run --rm -v $(pwd):/app yapro/monolog2db:latest bash -c "cd /app \ && composer install --optimize-autoloader --no-scripts --no-interaction \ && /app/vendor/bin/phpunit /app/tests"
开发
docker build -t yapro/monolog2db:latest -f ./Dockerfile ./
docker run -it --rm -v $(pwd):/app -w /app yapro/monolog2db:latest bash
composer install -o