forked from LiveCarta/PayPal-PHP-SDK
Enabled Factory to Inject Logger
This commit is contained in:
@@ -33,13 +33,6 @@ class OAuthTokenCredential extends PayPalResourceModel
|
|||||||
*/
|
*/
|
||||||
private static $expiryBufferTime = 120;
|
private static $expiryBufferTime = 120;
|
||||||
|
|
||||||
/**
|
|
||||||
* Private Variable
|
|
||||||
*
|
|
||||||
* @var \PayPal\Core\PayPalLoggingManager $logger
|
|
||||||
*/
|
|
||||||
private $logger;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Client ID as obtained from the developer portal
|
* Client ID as obtained from the developer portal
|
||||||
*
|
*
|
||||||
@@ -93,7 +86,6 @@ class OAuthTokenCredential extends PayPalResourceModel
|
|||||||
$this->clientId = $clientId;
|
$this->clientId = $clientId;
|
||||||
$this->clientSecret = $clientSecret;
|
$this->clientSecret = $clientSecret;
|
||||||
$this->cipher = new Cipher($this->clientSecret);
|
$this->cipher = new Cipher($this->clientSecret);
|
||||||
$this->logger = PayPalLoggingManager::getInstance(__CLASS__);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -276,9 +268,7 @@ class OAuthTokenCredential extends PayPalResourceModel
|
|||||||
if ($response == null || !isset($response["access_token"]) || !isset($response["expires_in"])) {
|
if ($response == null || !isset($response["access_token"]) || !isset($response["expires_in"])) {
|
||||||
$this->accessToken = null;
|
$this->accessToken = null;
|
||||||
$this->tokenExpiresIn = null;
|
$this->tokenExpiresIn = null;
|
||||||
$this->logger->warning(
|
PayPalLoggingManager::getInstance(__CLASS__)->warning("Could not generate new Access token. Invalid response from server: ");
|
||||||
"Could not generate new Access token. Invalid response from server: "
|
|
||||||
);
|
|
||||||
throw new PayPalConnectionException(null, "Could not generate new Access token. Invalid response from server: ");
|
throw new PayPalConnectionException(null, "Could not generate new Access token. Invalid response from server: ");
|
||||||
} else {
|
} else {
|
||||||
$this->accessToken = $response["access_token"];
|
$this->accessToken = $response["access_token"];
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace PayPal\Core;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logging Levels.
|
|
||||||
* Class containing all the constants for Logging Levels.
|
|
||||||
*/
|
|
||||||
class PayPalLoggingLevel
|
|
||||||
{
|
|
||||||
|
|
||||||
// DEBUG Logging Level
|
|
||||||
const DEBUG = 4;
|
|
||||||
|
|
||||||
// FINE Logging Level
|
|
||||||
const FINE = 3;
|
|
||||||
|
|
||||||
// INFO Logging Level
|
|
||||||
const INFO = 2;
|
|
||||||
|
|
||||||
// WARN Logging Level
|
|
||||||
const WARN = 1;
|
|
||||||
|
|
||||||
// ERROR Logging Level
|
|
||||||
const ERROR = 0;
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace PayPal\Core;
|
namespace PayPal\Core;
|
||||||
use PayPal\Log\PayPalLogger;
|
|
||||||
|
use PayPal\Log\PayPalLogFactory;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,32 +12,10 @@ use Psr\Log\LoggerInterface;
|
|||||||
*/
|
*/
|
||||||
class PayPalLoggingManager
|
class PayPalLoggingManager
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Logging Level
|
* @var array of logging manager instances with class name as key
|
||||||
*/
|
*/
|
||||||
const DEFAULT_LOGGING_LEVEL = 0;
|
private static $instances = array();
|
||||||
|
|
||||||
/**
|
|
||||||
* Logger Name
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $loggerName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Log Enabled
|
|
||||||
*
|
|
||||||
* @var bool
|
|
||||||
*/
|
|
||||||
private $isLoggingEnabled;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configured Logging Level
|
|
||||||
*
|
|
||||||
* @var int|mixed
|
|
||||||
*/
|
|
||||||
private $loggingLevel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The logger to be used for all messages
|
* The logger to be used for all messages
|
||||||
@@ -45,6 +24,13 @@ class PayPalLoggingManager
|
|||||||
*/
|
*/
|
||||||
private $logger;
|
private $logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logger Name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $loggerName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the singleton object
|
* Returns the singleton object
|
||||||
*
|
*
|
||||||
@@ -53,45 +39,32 @@ class PayPalLoggingManager
|
|||||||
*/
|
*/
|
||||||
public static function getInstance($loggerName = __CLASS__)
|
public static function getInstance($loggerName = __CLASS__)
|
||||||
{
|
{
|
||||||
$instance = new self();
|
if (array_key_exists($loggerName, PayPalLoggingManager::$instances)) {
|
||||||
$instance->setLoggerName($loggerName);
|
return PayPalLoggingManager::$instances[$loggerName];
|
||||||
|
}
|
||||||
|
$instance = new self($loggerName);
|
||||||
|
PayPalLoggingManager::$instances[$loggerName] = $instance;
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets Logger Name. Generally defaulted to Logging Class
|
|
||||||
*
|
|
||||||
* @param string $loggerName
|
|
||||||
*/
|
|
||||||
public function setLoggerName($loggerName = __CLASS__)
|
|
||||||
{
|
|
||||||
$this->loggerName = $loggerName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Constructor
|
* Default Constructor
|
||||||
|
*
|
||||||
|
* @param string $loggerName Generally represents the class name.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
private function __construct($loggerName)
|
||||||
{
|
{
|
||||||
$config = PayPalConfigManager::getInstance()->getConfigHashmap();
|
$config = PayPalConfigManager::getInstance()->getConfigHashmap();
|
||||||
$this->isLoggingEnabled = (array_key_exists('log.LogEnabled', $config) && $config['log.LogEnabled'] == '1');
|
if (!empty($config)) {
|
||||||
if ($this->isLoggingEnabled) {
|
// Checks if custom factory defined, and is it an implementation of @PayPalLogFactory
|
||||||
$loggingLevel = strtoupper($config['log.LogLevel']);
|
$factory = array_key_exists('log.AdapterFactory', $config) && in_array('PayPal\Log\PayPalLogFactory', class_implements($config['log.AdapterFactory'])) ? $config['log.AdapterFactory'] : '\PayPal\Log\PayPalDefaultLogFactory';
|
||||||
$this->setupLogger($config);
|
/** @var PayPalLogFactory $factoryInstance */
|
||||||
$this->loggingLevel =
|
$factoryInstance = new $factory();
|
||||||
(isset($loggingLevel) && defined(__NAMESPACE__ . "\\PayPalLoggingLevel::$loggingLevel")) ?
|
$this->logger = $factoryInstance->getLogger($loggerName);
|
||||||
constant(__NAMESPACE__ . "\\PayPalLoggingLevel::$loggingLevel") :
|
$this->loggerName = $loggerName;
|
||||||
PayPalLoggingManager::DEFAULT_LOGGING_LEVEL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setupLogger($config = array()) {
|
|
||||||
// Checks if custom adapter defined, and is it an implementation of @LoggerInterface
|
|
||||||
$loggingAdapter = array_key_exists('log.Adapter', $config) && in_array('\Psr\Log\LoggerInterface', class_implements($config['log.Adapter']))? $config['log.Adapter'] : '\PayPal\Log\PayPalLogger';
|
|
||||||
$this->logger = new $loggingAdapter();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log Error
|
* Log Error
|
||||||
*
|
*
|
||||||
@@ -99,10 +72,8 @@ class PayPalLoggingManager
|
|||||||
*/
|
*/
|
||||||
public function error($message)
|
public function error($message)
|
||||||
{
|
{
|
||||||
if ($this->isLoggingEnabled && $this->loggingLevel >= PayPalLoggingLevel::ERROR) {
|
|
||||||
$this->logger->error($message);
|
$this->logger->error($message);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log Warning
|
* Log Warning
|
||||||
@@ -111,12 +82,9 @@ class PayPalLoggingManager
|
|||||||
*/
|
*/
|
||||||
public function warning($message)
|
public function warning($message)
|
||||||
{
|
{
|
||||||
if ($this->isLoggingEnabled && $this->loggingLevel >= PayPalLoggingLevel::WARN) {
|
|
||||||
$this->logger->warning($message);
|
$this->logger->warning($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log Info
|
* Log Info
|
||||||
*
|
*
|
||||||
@@ -124,10 +92,8 @@ class PayPalLoggingManager
|
|||||||
*/
|
*/
|
||||||
public function info($message)
|
public function info($message)
|
||||||
{
|
{
|
||||||
if ($this->isLoggingEnabled && $this->loggingLevel >= PayPalLoggingLevel::INFO) {
|
|
||||||
$this->logger->info($message);
|
$this->logger->info($message);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log Fine
|
* Log Fine
|
||||||
@@ -140,21 +106,17 @@ class PayPalLoggingManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log Fine
|
* Log Debug
|
||||||
*
|
*
|
||||||
* @param string $message
|
* @param string $message
|
||||||
*/
|
*/
|
||||||
public function debug($message)
|
public function debug($message)
|
||||||
{
|
{
|
||||||
if ($this->isLoggingEnabled) {
|
|
||||||
$config = PayPalConfigManager::getInstance()->getConfigHashmap();
|
$config = PayPalConfigManager::getInstance()->getConfigHashmap();
|
||||||
// Check if logging in live
|
// Disable debug in live mode.
|
||||||
if (array_key_exists('mode', $config) && $config['mode'] == 'live' && $this->loggingLevel >= PayPalLoggingLevel::DEBUG) {
|
if (array_key_exists('mode', $config) && $config['mode'] != 'live') {
|
||||||
$this->logger->error("Not allowed to keep 'Debug' level for Live Environments. Reduced to 'INFO'");
|
|
||||||
} elseif (PayPalLoggingLevel::DEBUG <= $this->loggingLevel) {
|
|
||||||
$this->logger->debug($message);
|
$this->logger->debug($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
26
lib/PayPal/Log/PayPalDefaultLogFactory.php
Normal file
26
lib/PayPal/Log/PayPalDefaultLogFactory.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PayPal\Log;
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PayPalDefaultLogFactory
|
||||||
|
*
|
||||||
|
* This factory is the default implementation of Log factory.
|
||||||
|
*
|
||||||
|
* @package PayPal\Log
|
||||||
|
*/
|
||||||
|
class PayPalDefaultLogFactory implements PayPalLogFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns logger instance implementing LoggerInterface.
|
||||||
|
*
|
||||||
|
* @param string $className
|
||||||
|
* @return LoggerInterface instance of logger object implementing LoggerInterface
|
||||||
|
*/
|
||||||
|
public function getLogger($className)
|
||||||
|
{
|
||||||
|
return new PayPalLogger($className);
|
||||||
|
}
|
||||||
|
}
|
||||||
17
lib/PayPal/Log/PayPalLogFactory.php
Normal file
17
lib/PayPal/Log/PayPalLogFactory.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PayPal\Log;
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
interface PayPalLogFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns logger instance implementing LoggerInterface.
|
||||||
|
*
|
||||||
|
* @param string $className
|
||||||
|
* @return LoggerInterface instance of logger object implementing LoggerInterface
|
||||||
|
*/
|
||||||
|
public function getLogger($className);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,21 +3,31 @@
|
|||||||
namespace PayPal\Log;
|
namespace PayPal\Log;
|
||||||
|
|
||||||
use PayPal\Core\PayPalConfigManager;
|
use PayPal\Core\PayPalConfigManager;
|
||||||
use PayPal\Core\PayPalLoggingManager;
|
use Psr\Log\AbstractLogger;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LogLevel;
|
||||||
|
|
||||||
|
|
||||||
class PayPalLogger implements LoggerInterface {
|
class PayPalLogger extends AbstractLogger
|
||||||
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Logging Level
|
* @var array Indexed list of all log levels.
|
||||||
*/
|
*/
|
||||||
const DEFAULT_LOGGING_LEVEL = 0;
|
private $loggingLevels = array(
|
||||||
|
LogLevel::EMERGENCY,
|
||||||
|
LogLevel::ALERT,
|
||||||
|
LogLevel::CRITICAL,
|
||||||
|
LogLevel::ERROR,
|
||||||
|
LogLevel::WARNING,
|
||||||
|
LogLevel::NOTICE,
|
||||||
|
LogLevel::INFO,
|
||||||
|
LogLevel::DEBUG
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configured Logging Level
|
* Configured Logging Level
|
||||||
*
|
*
|
||||||
* @var int|mixed
|
* @var LogLevel $loggingLevel
|
||||||
*/
|
*/
|
||||||
private $loggingLevel;
|
private $loggingLevel;
|
||||||
|
|
||||||
@@ -28,65 +38,48 @@ class PayPalLogger implements LoggerInterface {
|
|||||||
*/
|
*/
|
||||||
private $loggerFile;
|
private $loggerFile;
|
||||||
|
|
||||||
public function initialize() {
|
/**
|
||||||
|
* Log Enabled
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private $isLoggingEnabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logger Name. Generally corresponds to class name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $loggerName;
|
||||||
|
|
||||||
|
public function __construct($className)
|
||||||
|
{
|
||||||
|
$this->loggerName = $className;
|
||||||
|
$this->initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function initialize()
|
||||||
|
{
|
||||||
$config = PayPalConfigManager::getInstance()->getConfigHashmap();
|
$config = PayPalConfigManager::getInstance()->getConfigHashmap();
|
||||||
if (!empty($config)) {
|
if (!empty($config)) {
|
||||||
|
$this->isLoggingEnabled = (array_key_exists('log.LogEnabled', $config) && $config['log.LogEnabled'] == '1');
|
||||||
|
if ($this->isLoggingEnabled) {
|
||||||
$this->loggerFile = ($config['log.FileName']) ? $config['log.FileName'] : ini_get('error_log');
|
$this->loggerFile = ($config['log.FileName']) ? $config['log.FileName'] : ini_get('error_log');
|
||||||
$loggingLevel = strtoupper($config['log.LogLevel']);
|
$loggingLevel = strtoupper($config['log.LogLevel']);
|
||||||
$this->loggingLevel =
|
$this->loggingLevel = (isset($loggingLevel) && defined("\\Psr\\Log\\LogLevel::$loggingLevel")) ?
|
||||||
(isset($loggingLevel) && defined(__NAMESPACE__ . "\\PayPalLoggingLevel::$loggingLevel")) ?
|
constant("\\Psr\\Log\\LogLevel::$loggingLevel") :
|
||||||
constant(__NAMESPACE__ . "\\PayPalLoggingLevel::$loggingLevel") :
|
LogLevel::INFO;
|
||||||
PayPalLoggingManager::DEFAULT_LOGGING_LEVEL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function emergency($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->error($message, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function alert($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->error($message, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function critical($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->error($message, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function error($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->initialize();
|
|
||||||
error_log("[" . date('d-m-Y h:i:s') . "] ERROR: $message\n", 3, $this->loggerFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function warning($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->initialize();
|
|
||||||
error_log("[" . date('d-m-Y h:i:s') . "] WARNING: $message\n", 3, $this->loggerFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function notice($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->initialize();
|
|
||||||
error_log("[" . date('d-m-Y h:i:s') . "] NOTICE: $message\n", 3, $this->loggerFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function info($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->initialize();
|
|
||||||
error_log("[" . date('d-m-Y h:i:s') . "] INFO: $message\n", 3, $this->loggerFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function debug($message, array $context = array())
|
|
||||||
{
|
|
||||||
$this->initialize();
|
|
||||||
error_log("[" . date('d-m-Y h:i:s') . "] DEBUG: $message\n", 3, $this->loggerFile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function log($level, $message, array $context = array())
|
public function log($level, $message, array $context = array())
|
||||||
{
|
{
|
||||||
$this->debug($message, $context);
|
if($this->isLoggingEnabled) {
|
||||||
|
// Checks if the message is at level below configured logging level
|
||||||
|
if (array_search($level, $this->loggingLevels) <= array_search($this->loggingLevel, $this->loggingLevels)) {
|
||||||
|
error_log("[" . date('d-m-Y h:i:s') . "] " . $this->loggerName . " : " . strtoupper($level) . ": $message\n", 3, $this->loggerFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,11 +86,11 @@ function getApiContext($clientId, $clientSecret)
|
|||||||
'mode' => 'sandbox',
|
'mode' => 'sandbox',
|
||||||
'log.LogEnabled' => true,
|
'log.LogEnabled' => true,
|
||||||
'log.FileName' => '../PayPal.log',
|
'log.FileName' => '../PayPal.log',
|
||||||
'log.LogLevel' => 'DEBUG', // PLEASE USE `FINE` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS
|
'log.LogLevel' => 'DEBUG', // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS
|
||||||
'cache.enabled' => true,
|
'cache.enabled' => true,
|
||||||
// 'http.CURLOPT_CONNECTTIMEOUT' => 30
|
// 'http.CURLOPT_CONNECTTIMEOUT' => 30
|
||||||
// 'http.headers.PayPal-Partner-Attribution-Id' => '123123123'
|
// 'http.headers.PayPal-Partner-Attribution-Id' => '123123123'
|
||||||
// 'log.Adapter' => '\Your\Custom\Logger' // Class name of the logger to be used. Must be implementing Psr\Log\LoggerInterface
|
//'log.AdapterFactory' => '\PayPal\Log\DefaultLogFactory' // Factory class implementing \PayPal\Log\PayPalLogFactory
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -25,22 +25,27 @@ mode = sandbox
|
|||||||
|
|
||||||
;Logging Information
|
;Logging Information
|
||||||
[Log]
|
[Log]
|
||||||
|
; For custom logging implementation, you can set the
|
||||||
|
; logging factory provider class here.
|
||||||
|
; The class should be implementing \PayPal\Log\PayPalLogFactory.
|
||||||
|
; If this is not set, it will default to \PayPal\Log\PayPalDefaultLogFactory.
|
||||||
|
;log.AdapterFactory=\PayPal\Log\PayPalDefaultLogFactory
|
||||||
|
|
||||||
|
; Settings for PayPalDefaultLogFactory
|
||||||
log.LogEnabled=true
|
log.LogEnabled=true
|
||||||
|
|
||||||
; When using a relative path, the log file is created
|
; When using a relative path, the log file is created
|
||||||
; relative to the .php file that is the entry point
|
; relative to the .php file that is the entry point
|
||||||
; for this request. You can also provide an absolute
|
; for this request. You can also provide an absolute
|
||||||
; path here
|
; path here
|
||||||
|
; Settings for PayPalDefaultLogFactory
|
||||||
log.FileName=../PayPal.log
|
log.FileName=../PayPal.log
|
||||||
|
|
||||||
; Logging level can be one of
|
; Logging level can be one of any provided at \Psr\Log\LogLevel
|
||||||
; Sandbox Environments: DEBUG, INFO, WARN, ERROR
|
|
||||||
; Live Environments: INFO, WARN, ERROR
|
|
||||||
; Logging is most verbose in the 'DEBUG' level and
|
; Logging is most verbose in the 'DEBUG' level and
|
||||||
; decreases as you proceed towards ERROR
|
; decreases as you proceed towards ERROR
|
||||||
; DEBUG level is disabled for live, to not log sensitive information.
|
; DEBUG level is disabled for live, to not log sensitive information.
|
||||||
; If the level is set to DEBUG, it will be reduced to FINE automatically,
|
; If the level is set to DEBUG, it will be reduced to INFO automatically
|
||||||
; with a warning message
|
|
||||||
log.LogLevel=INFO
|
log.LogLevel=INFO
|
||||||
|
|
||||||
;Caching Configuration
|
;Caching Configuration
|
||||||
|
|||||||
Reference in New Issue
Block a user