merkeleon/laravel-log

该包最新版本(1.4.6)没有提供许可证信息。

Laravel 审计日志

1.4.6 2022-06-16 05:29 UTC

This package is auto-updated.

Last update: 2024-09-16 10:25:36 UTC


README

Laravel 日志生成模块

安装

首先,使用Composer要求该包

composer require merkeleon/laravel-log

  1. 添加新的类Log,该类应扩展Merkeleon\Log\Model\Log

  2. 自定义您的日志类。

    • 添加受保护的静态属性$table - 表名或弹性搜索索引名
    • 添加自定义参数$customAttributes。默认情况下,仅保存Log::$attributes参数。Log::$customAttributes的键是参数标识符。Log::$customAttributes的值是转换。支持以下转换:
      • int
      • float
      • string
      • bool
      • array
    • 您可以添加验证规则。
    • 如果您想将日志复制到文件,您应重写toLogFileArray函数
  3. 添加merkeleon_log.php配置php artisan vendor:publish --provider="Merkeleon\Log\Providers\MerkeleonLogProvider"

    • 指定您的日志类
    • 指定驱动器(mysql或elastic)
    • 如果您想将日志复制到文件,您应指定日志文件的路径。
  4. 如果您想将日志保存到缓冲区,然后批量将所有日志从缓冲区写入存储

    • 将缓冲区目录路径添加到merkeleon_log.php配置。缓冲区目录应该是可写的
    • 您应该通过调用命令php artisan merkeleon:log:bulk-insert-to-storage {logName}来清空您的缓冲区

###示例

<?php

namespace App\Models;

use Merkeleon\Log\Model\Log;

class AuditLog extends Log
{
    protected static $table = 'audit_logs';

    protected static $customAttributes = [
        'user_id' => 'int',
        'user_id_related' => 'int',
        'data' => 'array',
    ];

    protected static $rules = [
        'event_type'      => 'required',
        'ip'              => 'required',
        'user_agent'      => 'required',
        'user_id'         => 'integer',
        'user_id_related' => 'integer',
    ];

    public function toLogFileArray()
    {
        return [
            "created_at"         => $this->created_at->format('Y-m-d H:i:s'),
            "ip"                 => $this->ip,
            "event_type"         => $this->event_type,
            "user_id"            => $this->user_id,
            "user_id_related"    => empty($this->user_id_related) ? '-' : $this->user_id_related,
            "user_agent"         => '"' . $this->user_agent . '"',
            "data"               => json_encode($this->data)
        ];
    }

}

    <?php
    
    return [
        'audit_log' => [
            'class' => \App\Models\AuditLog::class,
            'driver' => 'elastic',
            'log_file' => '/var/www/logs/audit_log.log'
        ],
    ];

用法

##示例

$auditLogRepository = LogRepository::make('audit_log');

$auditLogRepository->write([
    'user_id'         => 1,
    'event_type'      => 'user_banned',
    'user_id_related' => 2,
    'data'            => [
        'user'         => [
            'id'   => '1',
            'name' => 'Admin User',
        ],
        'user_related' => [
            'id'   => '2',
            'name' => 'Test user'
        ]
    ]
]);

$auditLogRepository->where('user_id', 1)->orderBy('event_type', 'asc')->paginate(10);

$auditLogRepository->where('user_id', 1)->get();

##示例

    $auditLogRepository = LogRepository::make('audit_log');

    $auditLogRepository->write([
        'user_id'         => 1,
        'event_type'      => 'user_banned',
        'user_id_related' => 2,
        'data'            => [
            'user'         => [
                'id'   => '1',
                'name' => 'Admin User',
            ],
            'user_related' => [
                'id'   => '2',
                'name' => 'Test user'
            ]
        ]
    ], true);
    
    $auditLogRepository->write([
        'user_id'         => 1,
        'event_type'      => 'user_login',
        'data'            => [
            'user'         => [
                'id'   => '1',
                'name' => 'Admin User',
            ]
        ]
    ], true);

    // call command `php artisan merkeleon:log:bulk-insert-to-storage audit_log`
    
    $auditLogRepository->where('user_id', 1)->orderBy('event_type', 'asc')->paginate(10);
   
    $auditLogRepository->where('user_id', 1)->get();