paoloamgomes / logger
Cockpit Headless CMS的Logger插件
Requires
- php: ^7.0
- monolog/monolog: ^1.23
This package is auto-updated.
Last update: 2023-05-24 23:19:39 UTC
README
此插件通过提供基于出色的Monolog库的日志功能,扩展了Cockpit CMS(Next)核心。
安装
可以使用或不用php composer进行安装。
不用php composer
- 下载zip文件并解压到'your-cockpit-docroot/addons/Logger'(例如 cockpitcms/addons/Logger)
- 使用composer安装Monolog依赖项
$ cd your-cockpit-docroot/addons/Logger
$ composer install
- 访问模块设置
https://your-cockpit-site/settings/logger
并确认页面可以加载。
使用php composer
- 使用composer安装插件
$ cd your-cockpit-docroot/addons
$ composer create-project pauloamgomes/logger Logger
配置
Logger操作可供超级管理员用户使用,如果其他用户属于具有适当权限的组,他们也可以使用。以下定义了以下权限
- manage.admin → 可以访问Logger设置
上述ACL可以添加到全局配置文件中,如下所示
groups: # manage logger settings managers: Logger: manage.admin: true # view log entries editors: Logger: manage.view: true
主要设置
设置页面提供所有主要配置
-
启用 - 选择此选项以启用日志记录
-
上下文属性 - 作为额外数组包含在日志条目中
- 用户名 - 包含活动用户的用户名
- 主机名 - 包含请求的主机名
- 请求URI - 包含请求URI
- 引用 - 包含引用URI
- HTTP方法 - 包含请求的HTTP方法
-
日志级别 - 设置日志级别
Cockpit Logger使用与Monolog中定义的相同的日志级别
- DEBUG
- INFO
- NOTICE
- WARNING
- ERROR
- CRITICAL
- ALERT
- EMERGENCY
当设置为DEBUG时,将在日志条目中包含有关请求的额外详细信息
- 持续时间时间
- 使用的内存
- 已加载的PHP文件数量
Monolog设置
Monolog部分总结为格式化和处理程序。
格式化程序
格式化程序定义了日志条目的结构,Cockpit Logger支持三种Monolog格式化程序
格式化程序 | 目的 |
---|---|
LineFormatter | 将日志记录格式化为单行字符串。 |
JsonFormatter | 将日志记录格式化为json |
HtmlFormatter | 用于将日志记录格式化为可读的html表格,主要适用于电子邮件。 |
还可以定义日志条目中日期的格式,值必须是有效的PHP日期格式,例如 Y-m-d H:i:s
处理程序
处理程序定义了日志将如何保存。Cockpit Logger提供两个处理程序
处理程序 | 目的 |
---|---|
StreamHandler | 使用配置的位置和文件名将日志条目保存到文件系统中 |
SyslogHandler | 使用操作系统的syslog功能来写入日志条目。需要标识符和syslog功能。 |
SyslogUdpHandler | 将日志条目推送到远程rsyslog服务器。 |
StreamHandler需要两个额外的设置
- 日志位置 - 使用相对于存储的相对位置,如"#storage:logs",或绝对路径,如"/logs"。在两种情况下,确保Web服务器可以写入目标位置
- 日志文件名 - 文件名(例如:cockpit.log)
SyslogHandler还需要额外的设置
- 标识符 - 用于识别程序名称的字符串(例如:cockpit)
- 功能 - 要使用的Syslog功能
通过config.yaml进行设置
除了配置页面,设置还可以在cockpit的config/config.yaml文件中定义,例如。
# Logger addon logger: enabled: 1, level: INFO handler: StreamHandler formatter: LineFormatter context: user: 1 hostname: 0 http_method: 1 referrer: 1 request_uri: 1
当使用config.yaml时,设置将优先于配置页面。
事件设置
大多数相关的Cockpit事件(例如用户登录,收集删除)会自动记录
- collections.save.after
- collections.remove.after
- collections.removecollection
- collections.createcollection
- collections.updatecollection
- regions.save.after
- regions.remove
- singleton.save.after
- singleton.saveData.after
- singleton.remove
- forms.save.after
- cockpit.assets.save
- cockpit.media.upload
- cockpit.media.removefiles
- cockpit.media.rename
- cockpit.assets.remove
- cockpit.authentication.success
- cockpit.authentication.failed
- cockpit.account.logout
- cockpit.clearcache
- cockpit.api.erroronrequest
- cockpit.request.error
- imagestyles.save.after
- imagestyles.createstyle
- imagestyles.remove
如果需要禁用,可以在config.yaml中禁用,例如
logger: disabledEvents: - collections.save.after - collections.remove.after
示例
- 使用LineFormatter和NOTICE级别保存收集条目
[2018-09-08 23:06:20] cockpit.NOTICE: Collection entry saved {"_id":"5aa5024609677doc2021128895","collection":"simpleblock","isUpdate":true,"user":"admin","hostname":"traefik_global.docker_default","request_uri":"/collections/save_entry/simpleblock","http_method":"POST"}
- 使用LineFormatter和DEBUG级别保存收集条目
[2018-09-08 23:06:46] cockpit.NOTICE: Collection entry saved {"_id":"5aa5024609677doc2021128895","collection":"simpleblock","isUpdate":true,"user":"admin","hostname":"traefik_global.docker_default","request_uri":"/collections/save_entry/simpleblock","http_method":"POST","debug":{"duration_time":"0.007 Sec","memory_usage":"2 MB","loaded_files":67}}
- 使用JsonFormatter和DEBUG级别保存收集条目
{ "channel": "cockpit", "context": { "_id": "5aa5024609677doc2021128895", "collection": "simpleblock", "debug": { "duration_time": "0.008 Sec", "loaded_files": 67, "memory_usage": "2 MB" }, "hostname": "traefik_global.docker_default", "http_method": "POST", "isUpdate": true, "request_uri": "/collections/save_entry/simpleblock", "user": "admin" }, "datetime": { "date": "2018-09-08 23:09:10.434059", "timezone": "UTC", "timezone_type": 3 }, "extra": [], "level": 250, "level_name": "NOTICE", "message": "Collection entry saved" }
使用Logger函数在其他插件上进行记录
Cockpit Logger可以通过调用模块在任意其他代码中使用,例如。
$this->app->module('logger')->info('writing a new log entry', ['hello' => 'world']); $this->app->module('logger')->warning('something weird happened'); $this->app->module('logger')->error('something very wrong happened', ['error' => $e]);
在Cockpit中查看最新的日志
可以通过服务器上的任何工具访问和处理日志,另外,还可以从UI访问最新的日志条目 - https://your-cockpit-site/recent-logs
。
UI支持自动获取和动态过滤
安全考虑
当使用StreamLogger并将日志位置设置为#storage:logs
时,请确保该文件不可公开访问。
版权和许可
版权所有2018年pauloamgomes,根据MIT许可协议。