implemented logging
This commit is contained in:
parent
ffe2316003
commit
575b700604
|
@ -230,6 +230,7 @@ lib/3rdParty/tcpdf/fonts/DejaVu*.ttf A Public Domain, Bitstream, I
|
||||||
lib/3rdParty/tcpdf/fonts/DejaVu*.z A Public Domain, Bitstream, Inc., Tavmjong Bah
|
lib/3rdParty/tcpdf/fonts/DejaVu*.z A Public Domain, Bitstream, Inc., Tavmjong Bah
|
||||||
lib/3rdParty/phpseclib B Jim Wigginton
|
lib/3rdParty/phpseclib B Jim Wigginton
|
||||||
lib/3rdParty/Monolog B 2011 Jordi Boggiano
|
lib/3rdParty/Monolog B 2011 Jordi Boggiano
|
||||||
|
lib/3rdParty/Psr B 2012 PHP Framework Interoperability Group
|
||||||
lib/3rdParty/yubico/Yubico.php C 2015 Yubico AB
|
lib/3rdParty/yubico/Yubico.php C 2015 Yubico AB
|
||||||
templates/lib/*jquery*.js B 2018 jQuery Foundation and other contributors
|
templates/lib/*jquery*.js B 2018 jQuery Foundation and other contributors
|
||||||
style/120_jquery-ui*.css B 2016 jQuery Foundation and other contributors
|
style/120_jquery-ui*.css B 2016 jQuery Foundation and other contributors
|
||||||
|
|
|
@ -10,7 +10,7 @@ fi
|
||||||
db_version 2.0 || [ $? -lt 30 ]
|
db_version 2.0 || [ $? -lt 30 ]
|
||||||
|
|
||||||
# 3rd party libs
|
# 3rd party libs
|
||||||
phpThirdPartyLibs='phpseclib tcpdf Monolog'
|
phpThirdPartyLibs='phpseclib tcpdf Monolog Psr'
|
||||||
for phpThirdPartyLib in $phpThirdPartyLibs; do
|
for phpThirdPartyLib in $phpThirdPartyLibs; do
|
||||||
if [ ! -L /usr/share/ldap-account-manager/lib/3rdParty/${phpThirdPartyLib} ] ; then
|
if [ ! -L /usr/share/ldap-account-manager/lib/3rdParty/${phpThirdPartyLib} ] ; then
|
||||||
ln -s /usr/share/php/${phpThirdPartyLib} /usr/share/ldap-account-manager/lib/3rdParty/${phpThirdPartyLib}
|
ln -s /usr/share/php/${phpThirdPartyLib} /usr/share/ldap-account-manager/lib/3rdParty/${phpThirdPartyLib}
|
||||||
|
|
|
@ -229,6 +229,7 @@ lib/3rdParty/tcpdf/fonts/DejaVu*.ttf A Public Domain, Bitstream, I
|
||||||
lib/3rdParty/tcpdf/fonts/DejaVu*.z A Public Domain, Bitstream, Inc., Tavmjong Bah
|
lib/3rdParty/tcpdf/fonts/DejaVu*.z A Public Domain, Bitstream, Inc., Tavmjong Bah
|
||||||
lib/3rdParty/phpseclib B Jim Wigginton
|
lib/3rdParty/phpseclib B Jim Wigginton
|
||||||
lib/3rdParty/Monolog B 2011 Jordi Boggiano
|
lib/3rdParty/Monolog B 2011 Jordi Boggiano
|
||||||
|
lib/3rdParty/Psr B 2012 PHP Framework Interoperability Group
|
||||||
lib/3rdParty/yubico/Yubico.php C 2015 Yubico AB
|
lib/3rdParty/yubico/Yubico.php C 2015 Yubico AB
|
||||||
templates/lib/*jquery*.js B 2018 jQuery Foundation and other contributors
|
templates/lib/*jquery*.js B 2018 jQuery Foundation and other contributors
|
||||||
style/120_jquery-ui*.css B 2016 jQuery Foundation and other contributors
|
style/120_jquery-ui*.css B 2016 jQuery Foundation and other contributors
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a simple Logger implementation that other Loggers can inherit from.
|
||||||
|
*
|
||||||
|
* It simply delegates all log-level-specific methods to the `log` method to
|
||||||
|
* reduce boilerplate code that a simple Logger that does the same thing with
|
||||||
|
* messages regardless of the error level has to implement.
|
||||||
|
*/
|
||||||
|
abstract class AbstractLogger implements LoggerInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* System is unusable.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function emergency($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::EMERGENCY, $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(LogLevel::ALERT, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Critical conditions.
|
||||||
|
*
|
||||||
|
* Example: Application component unavailable, unexpected exception.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function critical($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::CRITICAL, $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(LogLevel::ERROR, $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(LogLevel::WARNING, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normal but significant events.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function notice($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::NOTICE, $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(LogLevel::INFO, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detailed debug information.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function debug($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::DEBUG, $message, $context);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
class InvalidArgumentException extends \InvalidArgumentException
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes log levels.
|
||||||
|
*/
|
||||||
|
class LogLevel
|
||||||
|
{
|
||||||
|
const EMERGENCY = 'emergency';
|
||||||
|
const ALERT = 'alert';
|
||||||
|
const CRITICAL = 'critical';
|
||||||
|
const ERROR = 'error';
|
||||||
|
const WARNING = 'warning';
|
||||||
|
const NOTICE = 'notice';
|
||||||
|
const INFO = 'info';
|
||||||
|
const DEBUG = 'debug';
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a logger-aware instance.
|
||||||
|
*/
|
||||||
|
interface LoggerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Sets a logger instance on the object.
|
||||||
|
*
|
||||||
|
* @param LoggerInterface $logger
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setLogger(LoggerInterface $logger);
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic Implementation of LoggerAwareInterface.
|
||||||
|
*/
|
||||||
|
trait LoggerAwareTrait
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The logger instance.
|
||||||
|
*
|
||||||
|
* @var LoggerInterface
|
||||||
|
*/
|
||||||
|
protected $logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a logger.
|
||||||
|
*
|
||||||
|
* @param LoggerInterface $logger
|
||||||
|
*/
|
||||||
|
public function setLogger(LoggerInterface $logger)
|
||||||
|
{
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a logger instance.
|
||||||
|
*
|
||||||
|
* The message MUST be a string or object implementing __toString().
|
||||||
|
*
|
||||||
|
* The message MAY contain placeholders in the form: {foo} where foo
|
||||||
|
* will be replaced by the context data in key "foo".
|
||||||
|
*
|
||||||
|
* The context array can contain arbitrary data. The only assumption that
|
||||||
|
* can be made by implementors is that if an Exception instance is given
|
||||||
|
* to produce a stack trace, it MUST be in a key named "exception".
|
||||||
|
*
|
||||||
|
* See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
|
||||||
|
* for the full interface specification.
|
||||||
|
*/
|
||||||
|
interface LoggerInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* System is unusable.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function emergency($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Critical conditions.
|
||||||
|
*
|
||||||
|
* Example: Application component unavailable, unexpected exception.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function critical($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normal but significant events.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function notice($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interesting events.
|
||||||
|
*
|
||||||
|
* Example: User logs in, SQL logs.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function info($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detailed debug information.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function debug($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs with an arbitrary level.
|
||||||
|
*
|
||||||
|
* @param mixed $level
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function log($level, $message, array $context = array());
|
||||||
|
}
|
|
@ -0,0 +1,140 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a simple Logger trait that classes unable to extend AbstractLogger
|
||||||
|
* (because they extend another class, etc) can include.
|
||||||
|
*
|
||||||
|
* It simply delegates all log-level-specific methods to the `log` method to
|
||||||
|
* reduce boilerplate code that a simple Logger that does the same thing with
|
||||||
|
* messages regardless of the error level has to implement.
|
||||||
|
*/
|
||||||
|
trait LoggerTrait
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* System is unusable.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function emergency($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::EMERGENCY, $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(LogLevel::ALERT, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Critical conditions.
|
||||||
|
*
|
||||||
|
* Example: Application component unavailable, unexpected exception.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function critical($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::CRITICAL, $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(LogLevel::ERROR, $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(LogLevel::WARNING, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normal but significant events.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function notice($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::NOTICE, $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(LogLevel::INFO, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detailed debug information.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function debug($message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->log(LogLevel::DEBUG, $message, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs with an arbitrary level.
|
||||||
|
*
|
||||||
|
* @param mixed $level
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
abstract public function log($level, $message, array $context = array());
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Logger can be used to avoid conditional log calls.
|
||||||
|
*
|
||||||
|
* Logging should always be optional, and if no logger is provided to your
|
||||||
|
* library creating a NullLogger instance to have something to throw logs at
|
||||||
|
* is a good way to avoid littering your code with `if ($this->logger) { }`
|
||||||
|
* blocks.
|
||||||
|
*/
|
||||||
|
class NullLogger extends AbstractLogger
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Logs with an arbitrary level.
|
||||||
|
*
|
||||||
|
* @param mixed $level
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function log($level, $message, array $context = array())
|
||||||
|
{
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log\Test;
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Psr\Log\LogLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a base test class for ensuring compliance with the LoggerInterface.
|
||||||
|
*
|
||||||
|
* Implementors can extend the class and implement abstract methods to run this
|
||||||
|
* as part of their test suite.
|
||||||
|
*/
|
||||||
|
abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return LoggerInterface
|
||||||
|
*/
|
||||||
|
abstract public function getLogger();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This must return the log messages in order.
|
||||||
|
*
|
||||||
|
* The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>".
|
||||||
|
*
|
||||||
|
* Example ->error('Foo') would yield "error Foo".
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
abstract public function getLogs();
|
||||||
|
|
||||||
|
public function testImplements()
|
||||||
|
{
|
||||||
|
$this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideLevelsAndMessages
|
||||||
|
*/
|
||||||
|
public function testLogsAtAllLevels($level, $message)
|
||||||
|
{
|
||||||
|
$logger = $this->getLogger();
|
||||||
|
$logger->{$level}($message, array('user' => 'Bob'));
|
||||||
|
$logger->log($level, $message, array('user' => 'Bob'));
|
||||||
|
|
||||||
|
$expected = array(
|
||||||
|
$level.' message of level '.$level.' with context: Bob',
|
||||||
|
$level.' message of level '.$level.' with context: Bob',
|
||||||
|
);
|
||||||
|
$this->assertEquals($expected, $this->getLogs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideLevelsAndMessages()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
|
||||||
|
LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
|
||||||
|
LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
|
||||||
|
LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
|
||||||
|
LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
|
||||||
|
LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
|
||||||
|
LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
|
||||||
|
LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Psr\Log\InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testThrowsOnInvalidLevel()
|
||||||
|
{
|
||||||
|
$logger = $this->getLogger();
|
||||||
|
$logger->log('invalid level', 'Foo');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testContextReplacement()
|
||||||
|
{
|
||||||
|
$logger = $this->getLogger();
|
||||||
|
$logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
|
||||||
|
|
||||||
|
$expected = array('info {Message {nothing} Bob Bar a}');
|
||||||
|
$this->assertEquals($expected, $this->getLogs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testObjectCastToString()
|
||||||
|
{
|
||||||
|
if (method_exists($this, 'createPartialMock')) {
|
||||||
|
$dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString'));
|
||||||
|
} else {
|
||||||
|
$dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
|
||||||
|
}
|
||||||
|
$dummy->expects($this->once())
|
||||||
|
->method('__toString')
|
||||||
|
->will($this->returnValue('DUMMY'));
|
||||||
|
|
||||||
|
$this->getLogger()->warning($dummy);
|
||||||
|
|
||||||
|
$expected = array('warning DUMMY');
|
||||||
|
$this->assertEquals($expected, $this->getLogs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testContextCanContainAnything()
|
||||||
|
{
|
||||||
|
$closed = fopen('php://memory', 'r');
|
||||||
|
fclose($closed);
|
||||||
|
|
||||||
|
$context = array(
|
||||||
|
'bool' => true,
|
||||||
|
'null' => null,
|
||||||
|
'string' => 'Foo',
|
||||||
|
'int' => 0,
|
||||||
|
'float' => 0.5,
|
||||||
|
'nested' => array('with object' => new DummyTest),
|
||||||
|
'object' => new \DateTime,
|
||||||
|
'resource' => fopen('php://memory', 'r'),
|
||||||
|
'closed' => $closed,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->getLogger()->warning('Crazy context data', $context);
|
||||||
|
|
||||||
|
$expected = array('warning Crazy context data');
|
||||||
|
$this->assertEquals($expected, $this->getLogs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testContextExceptionKeyCanBeExceptionOrOtherValues()
|
||||||
|
{
|
||||||
|
$logger = $this->getLogger();
|
||||||
|
$logger->warning('Random message', array('exception' => 'oops'));
|
||||||
|
$logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
|
||||||
|
|
||||||
|
$expected = array(
|
||||||
|
'warning Random message',
|
||||||
|
'critical Uncaught Exception!'
|
||||||
|
);
|
||||||
|
$this->assertEquals($expected, $this->getLogs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DummyTest
|
||||||
|
{
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,146 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log\Test;
|
||||||
|
|
||||||
|
use Psr\Log\AbstractLogger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for testing purposes.
|
||||||
|
*
|
||||||
|
* It records all records and gives you access to them for verification.
|
||||||
|
*
|
||||||
|
* @method bool hasEmergency($record)
|
||||||
|
* @method bool hasAlert($record)
|
||||||
|
* @method bool hasCritical($record)
|
||||||
|
* @method bool hasError($record)
|
||||||
|
* @method bool hasWarning($record)
|
||||||
|
* @method bool hasNotice($record)
|
||||||
|
* @method bool hasInfo($record)
|
||||||
|
* @method bool hasDebug($record)
|
||||||
|
*
|
||||||
|
* @method bool hasEmergencyRecords()
|
||||||
|
* @method bool hasAlertRecords()
|
||||||
|
* @method bool hasCriticalRecords()
|
||||||
|
* @method bool hasErrorRecords()
|
||||||
|
* @method bool hasWarningRecords()
|
||||||
|
* @method bool hasNoticeRecords()
|
||||||
|
* @method bool hasInfoRecords()
|
||||||
|
* @method bool hasDebugRecords()
|
||||||
|
*
|
||||||
|
* @method bool hasEmergencyThatContains($message)
|
||||||
|
* @method bool hasAlertThatContains($message)
|
||||||
|
* @method bool hasCriticalThatContains($message)
|
||||||
|
* @method bool hasErrorThatContains($message)
|
||||||
|
* @method bool hasWarningThatContains($message)
|
||||||
|
* @method bool hasNoticeThatContains($message)
|
||||||
|
* @method bool hasInfoThatContains($message)
|
||||||
|
* @method bool hasDebugThatContains($message)
|
||||||
|
*
|
||||||
|
* @method bool hasEmergencyThatMatches($message)
|
||||||
|
* @method bool hasAlertThatMatches($message)
|
||||||
|
* @method bool hasCriticalThatMatches($message)
|
||||||
|
* @method bool hasErrorThatMatches($message)
|
||||||
|
* @method bool hasWarningThatMatches($message)
|
||||||
|
* @method bool hasNoticeThatMatches($message)
|
||||||
|
* @method bool hasInfoThatMatches($message)
|
||||||
|
* @method bool hasDebugThatMatches($message)
|
||||||
|
*
|
||||||
|
* @method bool hasEmergencyThatPasses($message)
|
||||||
|
* @method bool hasAlertThatPasses($message)
|
||||||
|
* @method bool hasCriticalThatPasses($message)
|
||||||
|
* @method bool hasErrorThatPasses($message)
|
||||||
|
* @method bool hasWarningThatPasses($message)
|
||||||
|
* @method bool hasNoticeThatPasses($message)
|
||||||
|
* @method bool hasInfoThatPasses($message)
|
||||||
|
* @method bool hasDebugThatPasses($message)
|
||||||
|
*/
|
||||||
|
class TestLogger extends AbstractLogger
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $records = [];
|
||||||
|
|
||||||
|
public $recordsByLevel = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
public function log($level, $message, array $context = [])
|
||||||
|
{
|
||||||
|
$record = [
|
||||||
|
'level' => $level,
|
||||||
|
'message' => $message,
|
||||||
|
'context' => $context,
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->recordsByLevel[$record['level']][] = $record;
|
||||||
|
$this->records[] = $record;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasRecords($level)
|
||||||
|
{
|
||||||
|
return isset($this->recordsByLevel[$level]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasRecord($record, $level)
|
||||||
|
{
|
||||||
|
if (is_string($record)) {
|
||||||
|
$record = ['message' => $record];
|
||||||
|
}
|
||||||
|
return $this->hasRecordThatPasses(function ($rec) use ($record) {
|
||||||
|
if ($rec['message'] !== $record['message']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isset($record['context']) && $rec['context'] !== $record['context']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}, $level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasRecordThatContains($message, $level)
|
||||||
|
{
|
||||||
|
return $this->hasRecordThatPasses(function ($rec) use ($message) {
|
||||||
|
return strpos($rec['message'], $message) !== false;
|
||||||
|
}, $level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasRecordThatMatches($regex, $level)
|
||||||
|
{
|
||||||
|
return $this->hasRecordThatPasses(function ($rec) use ($regex) {
|
||||||
|
return preg_match($regex, $rec['message']) > 0;
|
||||||
|
}, $level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasRecordThatPasses(callable $predicate, $level)
|
||||||
|
{
|
||||||
|
if (!isset($this->recordsByLevel[$level])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
foreach ($this->recordsByLevel[$level] as $i => $rec) {
|
||||||
|
if (call_user_func($predicate, $rec, $i)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __call($method, $args)
|
||||||
|
{
|
||||||
|
if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
|
||||||
|
$genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
|
||||||
|
$level = strtolower($matches[2]);
|
||||||
|
if (method_exists($this, $genericMethod)) {
|
||||||
|
$args[] = $level;
|
||||||
|
return call_user_func_array([$this, $genericMethod], $args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
$this->records = [];
|
||||||
|
}
|
||||||
|
}
|
|
@ -759,12 +759,22 @@ function lamEncryptionAlgo() {
|
||||||
* @param LAMCfgMain $cfgMain main configuration
|
* @param LAMCfgMain $cfgMain main configuration
|
||||||
*/
|
*/
|
||||||
function lamLogRemoteMessage($level, $message, $cfgMain) {
|
function lamLogRemoteMessage($level, $message, $cfgMain) {
|
||||||
|
include_once __DIR__ . '/3rdParty/Psr/Log/InvalidArgumentException.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Psr/Log/LoggerInterface.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/ResettableInterface.php';
|
||||||
include_once __DIR__ . '/3rdParty/Monolog/Logger.php';
|
include_once __DIR__ . '/3rdParty/Monolog/Logger.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Formatter/FormatterInterface.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Formatter/NormalizerFormatter.php';
|
||||||
include_once __DIR__ . '/3rdParty/Monolog/Formatter/LineFormatter.php';
|
include_once __DIR__ . '/3rdParty/Monolog/Formatter/LineFormatter.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Handler/HandlerInterface.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Handler/AbstractHandler.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Handler/AbstractProcessingHandler.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Handler/AbstractSyslogHandler.php';
|
||||||
|
include_once __DIR__ . '/3rdParty/Monolog/Handler/SyslogUdp/UdpSocket.php';
|
||||||
include_once __DIR__ . '/3rdParty/Monolog/Handler/SyslogUdpHandler.php';
|
include_once __DIR__ . '/3rdParty/Monolog/Handler/SyslogUdpHandler.php';
|
||||||
$remoteParts = explode(':', $cfgMain->logDestination);
|
$remoteParts = explode(':', $cfgMain->logDestination);
|
||||||
$server = $remoteParts[0];
|
$server = $remoteParts[1];
|
||||||
$port = $remoteParts[1];
|
$port = intval($remoteParts[2]);
|
||||||
$output = "%channel%.%level_name%: %message%";
|
$output = "%channel%.%level_name%: %message%";
|
||||||
$formatter = new Monolog\Formatter\LineFormatter($output);
|
$formatter = new Monolog\Formatter\LineFormatter($output);
|
||||||
$logger = new Monolog\Logger('lam');
|
$logger = new Monolog\Logger('lam');
|
||||||
|
|
Loading…
Reference in New Issue