Move log levels to independent class

This commit is contained in:
Jon Surrell 2016-12-10 21:59:41 +01:00
parent ae72ce24c4
commit 4f77954bc7
5 changed files with 131 additions and 91 deletions

View File

@ -3,10 +3,6 @@ if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
if ( ! class_exists( 'WC_Logger' ) ) {
include_once( dirname( dirname( __FILE__ ) ) . '/class-wc-logger.php' );
}
/**
* Abstract WC Log Handler Class
*
@ -25,23 +21,6 @@ abstract class WC_Log_Handler {
*/
protected $threshold;
/**
* Log levels by severity.
*
* @var array
* @access private
*/
protected static $log_levels = array(
WC_Logger::DEBUG => 0,
WC_Logger::INFO => 1,
WC_Logger::NOTICE => 2,
WC_Logger::WARNING => 3,
WC_Logger::ERROR => 4,
WC_Logger::CRITICAL => 5,
WC_Logger::ALERT => 6,
WC_Logger::EMERGENCY => 7,
);
/**
* Constructor for log handler.
*
@ -53,7 +32,7 @@ abstract class WC_Log_Handler {
public function __construct( $args = array() ) {
$args = wp_parse_args( $args, array(
'threshold' => WC_Logger::DEBUG,
'threshold' => WC_Log_Levels::DEBUG,
) );
$this->set_threshold( $args['threshold'] );
@ -78,22 +57,7 @@ abstract class WC_Log_Handler {
*/
public function set_threshold( $level ) {
$level = apply_filters( 'woocommerce_log_handler_set_threshold', $level, get_class( $this ) );
$this->threshold = $this->get_level_severity( $level );
}
/**
* Decode level string into integer.
*
* @param string $level emergency|alert|critical|error|warning|notice|info|debug
* @return int 0 (debug) - 7 (emergency) or -1 if level is not valid
*/
public static function get_level_severity( $level ) {
if ( array_key_exists( $level, self::$log_levels ) ) {
$severity = self::$log_levels[ $level ];
} else {
$severity = -1;
}
return $severity;
$this->threshold = WC_Log_Levels::get_level_severity( $level );
}
/**
@ -103,7 +67,7 @@ abstract class WC_Log_Handler {
* @return bool True if the log should be handled.
*/
public function should_handle( $level ) {
return $this->threshold <= $this->get_level_severity( $level );
return $this->threshold <= WC_Log_Levels::get_level_severity( $level );
}
/**

View File

@ -0,0 +1,74 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Standard log levels
*
* @class WC_Log_Levels
* @version 2.0.0
* @package WooCommerce/Classes
* @category Class
* @author WooThemes
*/
abstract class WC_Log_Levels {
/**
* Log Levels
*
* @see @link {https://tools.ietf.org/html/rfc5424}
*/
const DEBUG = 'debug';
const INFO = 'info';
const NOTICE = 'notice';
const WARNING = 'warning';
const ERROR = 'error';
const CRITICAL = 'critical';
const ALERT = 'alert';
const EMERGENCY = 'emergency';
/**
* Level strings mapped to integer severity.
*
* @var array
* @access protected
*/
protected static $level_severity = array(
self::DEBUG => 100,
self::INFO => 200,
self::NOTICE => 300,
self::WARNING => 400,
self::ERROR => 500,
self::CRITICAL => 600,
self::ALERT => 700,
self::EMERGENCY => 800,
);
/**
* Validate a level string.
*
* @param string $level
* @return bool True if $level is a valid level.
*/
public static function is_valid_level( $level ) {
return array_key_exists( $level, self::$level_severity );
}
/**
* Translate level string to integer.
*
* @param string $level emergency|alert|critical|error|warning|notice|info|debug
* @return int 100 (debug) - 800 (emergency) or 0 if not recognized
*/
public static function get_level_severity( $level ) {
if ( self::is_valid_level( $level ) ) {
$severity = self::$level_severity[ $level ];
} else {
$severity = 0;
}
return $severity;
}
}

View File

@ -1,5 +1,4 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
@ -15,20 +14,6 @@ if ( ! defined( 'ABSPATH' ) ) {
*/
class WC_Logger {
/**
* Log Levels
*
* @see @link {https://tools.ietf.org/html/rfc5424}
*/
const DEBUG = 'debug';
const INFO = 'info';
const NOTICE = 'notice';
const WARNING = 'warning';
const ERROR = 'error';
const CRITICAL = 'critical';
const ALERT = 'alert';
const EMERGENCY = 'emergency';
/**
* Stores registered log handlers.
*
@ -37,17 +22,6 @@ class WC_Logger {
*/
private $handlers;
private static $valid_levels = array(
self::DEBUG,
self::INFO,
self::NOTICE,
self::WARNING,
self::ERROR,
self::CRITICAL,
self::ALERT,
self::EMERGENCY,
);
/**
* Constructor for the logger.
*/
@ -69,7 +43,7 @@ class WC_Logger {
public function add( $handle, $message ) {
_deprecated_function( 'WC_Logger::add', '2.8', 'WC_Logger::log' );
$message = apply_filters( 'woocommerce_logger_add_message', $message, $handle );
$this->log( self::INFO, $message, array( 'tag' => $handle, '_legacy' => true ) );
$this->log( WC_Log_Levels::INFO, $message, array( 'tag' => $handle, '_legacy' => true ) );
wc_do_deprecated_action( 'woocommerce_log_add', array( $handle, $message ), '2.8', 'This action has been deprecated with no alternative.' );
return true;
}
@ -83,7 +57,7 @@ class WC_Logger {
* @param array $context Optional. Additional information for log handlers.
*/
public function log( $level, $message, $context = array() ) {
if ( ! in_array( $level, self::$valid_levels ) ) {
if ( ! WC_Log_Levels::is_valid_level( $level ) ) {
$class = __CLASS__;
$method = __FUNCTION__;
_doing_it_wrong( "{$class}::{$method}", sprintf( __( 'WC_Logger::log was called with an invalid level "%s".', 'woocommerce' ), $level ), '2.8' );
@ -107,7 +81,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function emergency( $message, $context = array() ) {
$this->log( self::EMERGENCY, $message, $context );
$this->log( WC_Log_Levels::EMERGENCY, $message, $context );
}
/**
@ -116,7 +90,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function alert( $message, $context = array() ) {
$this->log( self::ALERT, $message, $context );
$this->log( WC_Log_Levels::ALERT, $message, $context );
}
/**
@ -125,7 +99,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function critical( $message, $context = array() ) {
$this->log( self::CRITICAL, $message, $context );
$this->log( WC_Log_Levels::CRITICAL, $message, $context );
}
/**
@ -134,7 +108,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function error( $message, $context = array() ) {
$this->log( self::ERROR, $message, $context );
$this->log( WC_Log_Levels::ERROR, $message, $context );
}
/**
@ -143,7 +117,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function warning( $message, $context = array() ) {
$this->log( self::WARNING, $message, $context );
$this->log( WC_Log_Levels::WARNING, $message, $context );
}
/**
@ -152,7 +126,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function notice( $message, $context = array() ) {
$this->log( self::NOTICE, $message, $context );
$this->log( WC_Log_Levels::NOTICE, $message, $context );
}
/**
@ -161,7 +135,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function info( $message, $context = array() ) {
$this->log( self::INFO, $message, $context );
$this->log( WC_Log_Levels::INFO, $message, $context );
}
/**
@ -170,7 +144,7 @@ class WC_Logger {
* @see WC_Logger::log
*/
public function debug( $message, $context = array() ) {
$this->log( self::DEBUG, $message, $context );
$this->log( WC_Log_Levels::DEBUG, $message, $context );
}
/**

View File

@ -0,0 +1,44 @@
<?php
/**
* Class WC_Tests_Logger
* @package WooCommerce\Tests\Log
* @since 2.8
*/
class WC_Tests_Log_Levels extends WC_Unit_Test_Case {
/**
* Test get_level_severity().
*
* @since 2.8
*/
public function test_get_level_severity() {
$this->assertEquals( 0, WC_Log_Levels::get_level_severity( 'unrecognized level' ) );
$this->assertEquals( 100, WC_Log_Levels::get_level_severity( 'debug' ) );
$this->assertEquals( 200, WC_Log_Levels::get_level_severity( 'info' ) );
$this->assertEquals( 300, WC_Log_Levels::get_level_severity( 'notice' ) );
$this->assertEquals( 400, WC_Log_Levels::get_level_severity( 'warning' ) );
$this->assertEquals( 500, WC_Log_Levels::get_level_severity( 'error' ) );
$this->assertEquals( 600, WC_Log_Levels::get_level_severity( 'critical' ) );
$this->assertEquals( 700, WC_Log_Levels::get_level_severity( 'alert' ) );
$this->assertEquals( 800, WC_Log_Levels::get_level_severity( 'emergency' ) );
}
/**
* Test is_valid_level().
*
* @since 2.8
*/
public function test_is_valid_level() {
$this->assertEquals( false, WC_Log_Levels::get_level_severity( 'unrecognized level' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'debug' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'info' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'notice' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'warning' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'error' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'critical' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'alert' ) );
$this->assertEquals( true, WC_Log_Levels::get_level_severity( 'emergency' ) );
}
}

View File

@ -152,22 +152,6 @@ class WC_Tests_Logger extends WC_Unit_Test_Case {
remove_filter( 'woocommerce_register_log_handlers', array( $this, '_return_file_log_handler' ) );
}
/**
* Test conversion to string level to integers.
*
* @since 2.8
*/
public function test_get_level_severity() {
$this->assertEquals( WC_Log_Handler::get_level_severity( 'debug' ), 0 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'info' ), 1 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'notice' ), 2 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'warning' ), 3 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'error' ), 4 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'critical' ), 5 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'alert' ), 6 );
$this->assertEquals( WC_Log_Handler::get_level_severity( 'emergency' ), 7 );
}
/**
* Helper for log handler consume test.
*