snakano/cakephp-monolog

CakePHP Monolog 插件

安装数量: 14,485

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 15

开放问题: 0

类型:cakephp-plugin

2.1.0 2020-03-30 10:06 UTC

This package is auto-updated.

Last update: 2024-08-29 05:13:02 UTC


README

尽管 CakePHP 提供了非常先进的日志系统,但我仍然需要编写大量代码才能按照所需的方式处理日志。为了编写尽可能少的代码,我选择了流行的 monolog 库。

DatadogProcessor 会附加 Datadog APM 跟踪 ID 和 Span ID。此处理器会自动将标识符附加到所有日志消息中。请参阅: https://docs.datadoghq.com/tracing/advanced/connect_logs_and_traces/?tab=php

安装

由于 monolog 是一个 composer ,并且为了避免手动编写大量包含(与自动加载相比),我决定也将其作为 composer 包发布,并利用自动加载的魔法。

首先,将此插件作为需求添加到您的 composer.json

{
	"repositories": [
		{
			"type": "vcs",
			"url": "https://github.com/SNakano/cakephp-monolog"
		}
	],
	"require": {
		"snakano/monolog": "dev-master"
	}
}

然后更新

php composer.phar update

就这样!现在您应该准备好开始配置您的通道了。

配置

首先创建一个日志配置文件(例如,app/Config/log.php),您将在 app/Config/bootstrap.php 中早期包含它

include 'log.php';

一个基本的配置,用于复制 Cake 所做的操作但使用 Monolog(以提供一个良好的起始示例),看起来可能如下所示

require VENDORS . 'autoload.php';
App::build([
	'Plugin' => [ROOT . DS . 'Plugin' . DS]
]);

CakePlugin::load('Monolog');

CakeLog::config('debug', array(
	'engine' => 'Monolog.Monolog',
	'channel' => 'app',
	'handlers' => array(
		'Stream' => array(
			LOGS . 'debug.log',
			'formatters' => array(
				'Line' => array("%datetime% %channel% %level_name%: %message%\n")
			)
		)
	)
));

注意,对于 CakePHP 版本 < 2.4,引擎名称应该是 Monolog.MonologLog

简单吗?但是,让我们真正做一些严肃的日志记录,否则为什么要离开默认的 CakePHP 日志 系统?

下面的示例展示了如何设置

  • 保留 30 天并可通过 logstash 读取的轮转日志,包括内存峰值使用信息
  • 包含更多关于请求的详细信息的正常日志文件
  • 仅包含错误消息的临界和警报级别的电子邮件通知
CakeLog::config('logstash', array(
	'engine' => 'Monolog.Monolog',
	'channel' => 'app',
	'handlers' => array(
		'RotatingFile' => array(
			LOGS . 'application.log',
			30
		),
		'Stream' => array(
			LOGS . 'logstash.log',
			'formatters' => array(
				'Line' => array("%datetime% %channel% %level_name%: %message%\n")
			),
			'processors' => array(
				'DatadogProcessor' => array(
					'search' => CakePlugin::path('Monolog') . 'Lib' . DS . 'Log' . DS . 'Processor'
				),
				'MemoryUsage' => array(),
				'Web' => array()
			)
		),
		'CakeEmail' => array(
			'admin@domain.com',
			'ALERT: APPLICATION REQUIRES IMMEDIATE ATTENTION.',
			'default'
		)
	)
));