223 lines
4.7 KiB
PHP
223 lines
4.7 KiB
PHP
<?php
|
|
|
|
class Brizy_Logger {
|
|
|
|
const EMERGENCY_LOG = 'EMERGENCY';
|
|
const ALERT_LOG = 'ALERT';
|
|
const CRITICAL_LOG = 'CRITICAL';
|
|
const ERROR_LOG = 'ERROR';
|
|
const WARNING_LOG = 'WARNING';
|
|
const NOTICE_LOG = 'NOTICE';
|
|
const INFO_LOG = 'INFO';
|
|
const DEBUG_LOG = 'DEBUG';
|
|
|
|
/**
|
|
* @var self
|
|
*/
|
|
static protected $instance = null;
|
|
|
|
/**
|
|
* Get logger instance.
|
|
*/
|
|
static public function instance() {
|
|
|
|
if ( self::$instance ) {
|
|
return self::$instance;
|
|
}
|
|
|
|
return self::$instance = new self();
|
|
}
|
|
|
|
|
|
/**
|
|
* Create logger table.
|
|
*/
|
|
static public function install() {
|
|
|
|
global $wpdb;
|
|
|
|
$tableName = "{$wpdb->prefix}brizy_logs";
|
|
|
|
if ( ! function_exists( 'maybe_create_table' ) ) {
|
|
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
|
}
|
|
|
|
$create_table_query = "
|
|
CREATE TABLE {$tableName} (
|
|
`id` bigint PRIMARY KEY AUTO_INCREMENT,
|
|
`type` text NOT NULL,
|
|
`message` text NOT NULL,
|
|
`context` text NOT NULL,
|
|
`session_id` text NOT NULL,
|
|
`date` datetime NOT NULL
|
|
) DEFAULT CHARSET=utf8;";
|
|
|
|
maybe_create_table( $tableName, $create_table_query );
|
|
|
|
self::clean();
|
|
}
|
|
|
|
|
|
/**
|
|
* Create logger table.
|
|
*/
|
|
static public function clean() {
|
|
|
|
global $wpdb;
|
|
$wpdb->query( "TRUNCATE `{$wpdb->prefix}brizy_logs`" );
|
|
}
|
|
|
|
|
|
/**
|
|
* @param $type
|
|
* @param $message
|
|
* @param array $context
|
|
*/
|
|
private function write_log( $type, $message, $context = array() ) {
|
|
global $wpdb;
|
|
|
|
if ( ! BRIZY_LOG && ! in_array( $type, [
|
|
self::EMERGENCY_LOG,
|
|
self::ALERT_LOG,
|
|
self::CRITICAL_LOG,
|
|
self::ERROR_LOG,
|
|
] ) ) {
|
|
return;
|
|
}
|
|
|
|
$wpdb->insert( "{$wpdb->prefix}brizy_logs", array(
|
|
'type' => $type,
|
|
'message' => $message,
|
|
'context' => serialize( $context ),
|
|
'session_id' => session_id(),
|
|
'date' => current_time( 'mysql', 1 )
|
|
), array( '%s', '%s', '%s', '%s', '%s' ) );
|
|
}
|
|
|
|
/**
|
|
* System is unusable.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function emergency( $message, array $context = array() ) {
|
|
$this->log( self::EMERGENCY_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Action must be taken immediately.
|
|
*
|
|
* Example: Entire website down, database unavailable, etc. This should
|
|
* trigger the SMS alerts and wake you up.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function alert( $message, array $context = array() ) {
|
|
$this->log( self::ALERT_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Critical conditions.
|
|
*
|
|
* Example: Application component unavailable, unexpected exception.
|
|
*
|
|
* @param string $message
|
|
* @param array $contextgt
|
|
*
|
|
* @return void
|
|
*/
|
|
public function critical( $message, array $context = array() ) {
|
|
$this->log( self::CRITICAL_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Runtime errors that do not require immediate action but should typically
|
|
* be logged and monitored.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function error( $message, array $context = array() ) {
|
|
$this->log( self::ERROR_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Exceptional occurrences that are not errors.
|
|
*
|
|
* Example: Use of deprecated APIs, poor use of an API, undesirable things
|
|
* that are not necessarily wrong.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function warning( $message, array $context = array() ) {
|
|
$this->log( self::WARNING_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Normal but significant events.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function notice( $message, array $context = array() ) {
|
|
$this->log( self::NOTICE_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Interesting events.
|
|
*
|
|
* Example: User logs in, SQL logs.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function info( $message, array $context = array() ) {
|
|
$this->log( self::INFO_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Detailed debug information.
|
|
*
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function debug( $message, array $context = array() ) {
|
|
$this->log( self::DEBUG_LOG, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* Logs with an arbitrary level.
|
|
*
|
|
* @param mixed $level
|
|
* @param string $message
|
|
* @param array $context
|
|
*
|
|
* @return void
|
|
*/
|
|
public function log( $level, $message, array $context = array() ) {
|
|
$this->write_log( $level, $message, $context );
|
|
}
|
|
|
|
/**
|
|
* @param Exception $exception
|
|
*/
|
|
public function exception( \Exception $exception ) {
|
|
$this->log( self::ERROR_LOG, $exception->getMessage(), array( $exception->getTraceAsString() ) );
|
|
}
|
|
} |