daoandco/cakephp-logging

There is no license information available for the latest version (v1.1.1) of this package.

Cakephp plugin for Log user's action in database

Installs: 668

Dependents: 0

Suggesters: 0

Security: 0

Stars: 4

Watchers: 3

Forks: 0

Open Issues: 0

Type:cakephp-plugin

v1.1.1 2016-04-28 11:37 UTC

This package is not auto-updated.

Last update: 2022-08-06 07:42:01 UTC


README

Log user's action in your Database. This plugin is composed of a Component and a Log engine. This plugin is compatible with core logs of CakePHP.

------------------------------------

This project is no longer maintained

------------------------------------

Requirements

  • PHP version 5.4.16 or higher
  • CakePhp 3.0 or higher

Installation

You can install this plugin into your CakePHP application using composer.

The recommended way to install composer packages is:

composer require daoandco/cakephp-logging

Loading the Plugin like that

// In config/bootstrap.php
Plugin::load('Logging', ['bootstrap' => true, 'routes' => false]);

Create table log : execute shema in config/shema/logs.sql (you can change the table name)

CREATE TABLE `logs` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `created` DATETIME NOT NULL,
    `level` VARCHAR(50) NOT NULL,
    `scope` VARCHAR(50) NULL DEFAULT NULL,
    `user_id` INT(10) UNSIGNED NULL DEFAULT NULL,
    `message` TEXT NULL,
    `context` TEXT NULL,
    PRIMARY KEY (`id`),
    INDEX `user_id` (`user_id`),
    INDEX `scope` (`scope`),
    INDEX `level` (`level`)
)
COLLATE='utf8_general_ci'
;

Quick Start

If you want just replace default config you can change Log's config in your app file

// In config/app.php
'Log' => [
	'debug' => [
		'className' => 'Logging.Database',
        'levels' => ['notice', 'info', 'debug'],
    ],
    'error' => [
        'className' => 'Logging.Database',
        'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
    ],
],

For writing to logs see http://book.cakephp.org/3.0/en/core-libraries/logging.html#writing-to-logs

use Cake\Log\Log;

Log::write('debug', 'Something did not work');

Or you can use LogComponent in your controllers. The component store by default request and session in context field.

$this->loadComponent('Logging.Log');

$this->Log->write('debug', 'myScope', 'Message');

Configuration

Options

  • className : 'Logging.Database'
  • model : Model name (default: 'Logging.Logs')
  • table : table name (default: 'logs')
  • levels : logging levels (default: '[]' = all levels) More infos
  • scopes: logging scopes (default: '[]' = all scopes) More infos
  • requiredScope : if true no store logs if scope is empty (default false)
  • userId : path where is stored user id in Session (default Auth.User.id)

Use cases

Edit config/app.php

Write everything with the plugin

// In config/app.php
'Log' => [
	'debug' => [
		'className' => 'Logging.Database',
        'levels' => ['notice', 'info', 'debug'],
    ],
    'error' => [
        'className' => 'Logging.Database',
        'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
    ],
],

Write cake log in file and write application log with the plugin

With this configuration the scope is required when you write in a log

'Log' => [
    'debug' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'debug',
        'levels' => ['notice', 'info', 'debug'],
        'scopes' => false,
        'url' => env('LOG_DEBUG_URL', null),
    ],
    'error' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'error',
        'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        'scopes' => false,
        'url' => env('LOG_ERROR_URL', null),
    ],
    'app' => [
        'className'     => 'Logging.Database',
        'requiredScope' => true,
    ],
],

Writing to Logs :

// With Cake\Log\Log;
Log::write('debug', 'Something did not work', ['scope'=>['myScope']]);

// Or with component
$this->Log->write('debug', 'myScope', 'Something did not work');

Component

// Load component
$this->loadComponent('Logging.Log');

Configuration

  • request: if true store $this->request in Context (default: 'false')
  • session: if true store $_SESSION Context (default: 'false')
  • ip: if true store $this->request->clientIp() Context (default: 'false')
  • referer: if true store $this->request->referer() Context (default: 'false')
  • vars: store more datas (ex : ['plugin' => $this->plugin]

Methods

  • write($level, $scope, $message, $context, $config) Log a message

  • emergency($scope, $message, $context, $config) Log a emergency message

  • alert($scope, $message, $context, $config) Log a alert message

  • critical($scope, $message, $context, $config) Log a critical message

  • error($scope, $message, $context, $config) Log a error message

  • warning($scope, $message, $context, $config) Log a warning message

  • notice($scope, $message, $context, $config) Log a notice message

  • debug($scope, $message, $context, $config) Log a debug message

  • info($scope, $message, $context, $config) Log a info message

Parameters

  • levels : (string) logging levels ('emergency'|'alert'|'critical'|'error'|'warning'|'notice'|'debug'|'info') More infos
  • scope : (string|array) logging scopes More infos
  • message: (string) log message
  • context: (array) Additional data to be used for logging the message
  • config: change base config (ex request, session...)

Use

// Basic usage
$this->Log->write('debug', 'myScope', 'Something did not work');

// With convenience methods
$this->Log->emergency('myScope', 'My message');
$this->Log->alert('myScope', 'My message');
$this->Log->critical('myScope', 'My message');
$this->Log->error('myScope', 'My message');
$this->Log->warning('myScope', 'My message');
$this->Log->notice('myScope', 'My message');
$this->Log->debug('myScope', 'My message');
$this->Log->info('myScope', 'My message');

// Add datas
$this->Log->info('myScope', 'My message', ['key1' => 'value1', 'key2' => 'value2']);

// Save request
$this->Log->info('myScope', 'My message', [], ['request' => true]);

// Save session
$this->Log->info('myScope', 'My message', [], ['session' => true]);

// Save ip
$this->Log->info('myScope', 'My message', [], ['ip' => true]);

// Save referer url
$this->Log->info('myScope', 'My message', [], ['referer' => true]);

// Don't save userId
$this->Log->info('myScope', 'My message', ['userId' => null];

// Force userId if different to $_SESSION
$this->Log->info('myScope', 'My message', ['userId' => 2];

// No scope
$this->Log->info(null, 'My message');

// Multi scope = multi lines in bdd
$this->Log->info(['scope1', 'scope2'], 'My message');