此包已被废弃且不再维护。未建议替代包。

Cockpit Headless CMS的Logger插件

1.2 2018-11-12 16:55 UTC

This package is auto-updated.

Last update: 2023-05-24 23:19:39 UTC


README

此插件通过提供基于出色的Monolog库的日志功能,扩展了Cockpit CMS(Next)核心。

安装

可以使用或不用php composer进行安装。

不用php composer

  1. 下载zip文件并解压到'your-cockpit-docroot/addons/Logger'(例如 cockpitcms/addons/Logger)
  2. 使用composer安装Monolog依赖项
$ cd your-cockpit-docroot/addons/Logger
$ composer install
  1. 访问模块设置 https://your-cockpit-site/settings/logger 并确认页面可以加载。

使用php composer

  1. 使用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

主要设置

设置页面提供所有主要配置

Cockpit Logger settings page

  1. 启用 - 选择此选项以启用日志记录

  2. 上下文属性 - 作为额外数组包含在日志条目中

    • 用户名 - 包含活动用户的用户名
    • 主机名 - 包含请求的主机名
    • 请求URI - 包含请求URI
    • 引用 - 包含引用URI
    • HTTP方法 - 包含请求的HTTP方法
  3. 日志级别 - 设置日志级别

    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

示例

  • 使用LineFormatterNOTICE级别保存收集条目
[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"}
  • 使用LineFormatterDEBUG级别保存收集条目
[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}}
  • 使用JsonFormatterDEBUG级别保存收集条目
{
    "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"
}
  • 使用HtmlFormatterNOTICE级别保存收集条目:HtmlFormatter Example

使用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

Recent log messages

UI支持自动获取和动态过滤

Recent log messages using filters

安全考虑

当使用StreamLogger并将日志位置设置为#storage:logs时,请确保该文件不可公开访问。

版权和许可

版权所有2018年pauloamgomes,根据MIT许可协议。