19    private static $loggingHandler = 
null;
 
   24    private static $logLevel = 
null;
 
   29    private static $captureLog = 
false;
 
   34    private static $capturedLog = array();
 
   41    private static $earlyLog = array();
 
   50    private static $logLevelStack = array();
 
   59    private static $logMask = 0;
 
   66    const NO_TRACKID = 
'_NOTRACKIDYET_';
 
   72    private static $trackid = self::NO_TRACKID;
 
  102    private static $format = 
'%date{%b %d %H:%M:%S} %process %level %stat[%trackid] %msg';
 
  109    private static $shutdownRegistered = 
false;
 
  116    private static $shuttingDown = 
false;
 
  135        self::log(self::EMERG, $string);
 
  146        self::log(self::CRIT, $string);
 
  155    public static function alert($string)
 
  157        self::log(self::ALERT, $string);
 
  166    public static function error($string)
 
  168        self::log(self::ERR, $string);
 
  179        self::log(self::WARNING, $string);
 
  190        self::log(self::NOTICE, $string);
 
  199    public static function info($string)
 
  201        self::log(self::INFO, $string);
 
  211    public static function debug($string)
 
  222    public static function stats($string)
 
  224        self::log(self::NOTICE, $string, 
true);
 
  235        self::$captureLog = $val;
 
  244        return self::$capturedLog;
 
  255        self::$trackid = $trackId;
 
  270        } 
catch (\Exception $e) {
 
  272            self::error(
'Cannot load or create session: '.$e->getMessage());
 
  275        self::$trackid = 
$s->getTrackID();
 
  277        self::$shuttingDown = 
true;
 
  278        foreach (self::$earlyLog as $msg) {
 
  279            self::log($msg[
'level'], $msg[
'string'], $msg[
'statsLog']);
 
  293        return ($errno & self::$logMask) || !($errno & error_reporting());
 
  306        assert(is_int(
$mask));
 
  308        $currentEnabled = error_reporting();
 
  309        self::$logLevelStack[] = array($currentEnabled, self::$logMask);
 
  311        $currentEnabled &= ~$mask;
 
  312        error_reporting($currentEnabled);
 
  313        self::$logMask |= 
$mask;
 
  324        $lastMask = array_pop(self::$logLevelStack);
 
  325        error_reporting($lastMask[0]);
 
  326        self::$logMask = $lastMask[1];
 
  340        self::$earlyLog[] = array(
'level' => $level, 
'string' => 
$message, 
'statsLog' => 
$stats);
 
  343        if (!self::$shutdownRegistered) {
 
  344            register_shutdown_function(array(
'SimpleSAML\Logger', 
'flush'));
 
  345            self::$shutdownRegistered = 
true;
 
  353        self::$loggingHandler = 
false;
 
  356        $known_handlers = array(
 
  357            'syslog'   => 
'SimpleSAML\Logger\SyslogLoggingHandler',
 
  358            'file'     => 
'SimpleSAML\Logger\FileLoggingHandler',
 
  359            'errorlog' => 
'SimpleSAML\Logger\ErrorLogLoggingHandler',
 
  367        self::$logLevel = 
$config->getInteger(
'logging.level', self::INFO);
 
  374        if (!array_key_exists(
$handler, $known_handlers) && class_exists(
$handler)) {
 
  375            if (!in_array(
'SimpleSAML\Logger\LoggingHandlerInterface', class_implements(
$handler), 
true)) {
 
  376                throw new \Exception(
"The logging handler '$handler' is invalid.");
 
  380            if (!array_key_exists(
$handler, $known_handlers)) {
 
  381                throw new \Exception(
 
  382                    "Invalid value for the 'logging.handler' configuration option. Unknown handler '".
$handler.
"''." 
  394    private static function log($level, $string, $statsLog = 
false)
 
  396        if (self::$loggingHandler === 
false) {
 
  398            self::defer($level, $string, $statsLog);
 
  400        } elseif (php_sapi_name() === 
'cli' || defined(
'STDIN')) {
 
  402            if (is_null(self::$loggingHandler)) {
 
  403                self::createLoggingHandler(
'SimpleSAML\Logger\StandardErrorLoggingHandler');
 
  406            if (self::$trackid === self::NO_TRACKID) {
 
  407                self::$trackid = 
'CL'.bin2hex(openssl_random_pseudo_bytes(4));
 
  409        } elseif (self::$loggingHandler === 
null) {
 
  411            self::createLoggingHandler();
 
  413            if (!empty(self::$earlyLog)) {
 
  415                foreach (self::$earlyLog as $msg) {
 
  416                    self::log($msg[
'level'], $msg[
'string'], $msg[
'statsLog']);
 
  421        if (self::$captureLog) {
 
  422            $ts = microtime(
true);
 
  423            $msecs = (int) (($ts - (
int) $ts) * 1000);
 
  424            $ts = gmdate(
'H:i:s', $ts).sprintf(
'.%03d', $msecs).
'Z';
 
  425            self::$capturedLog[] = $ts.
' '.$string;
 
  428        if (self::$logLevel >= $level || $statsLog) {
 
  429            if (is_array($string)) {
 
  430                $string = implode(
",", $string);
 
  433            $formats = array(
'%trackid', 
'%msg', 
'%srcip', 
'%stat');
 
  434            $replacements = array(self::$trackid, $string, 
$_SERVER[
'REMOTE_ADDR']);
 
  440            array_push($replacements, $stat);
 
  442            if (self::$trackid === self::NO_TRACKID && !self::$shuttingDown) {
 
  444                self::defer($level, $string, $statsLog);
 
  446            } elseif (self::$trackid === self::NO_TRACKID) {
 
  448                array_shift($replacements);
 
  449                array_unshift($replacements, 
'N/A');
 
  454            self::$loggingHandler->log($level, $string);
 
An exception for terminatinating execution or to throw for unit testing.
static getCapturedLog()
Get the captured log.
static isErrorMasked($errno)
Evaluate whether errors of a certain error level are masked or not.
static setCaptureLog($val=true)
static log($level, $string, $statsLog=false)
static emergency($string)
static setTrackId($trackId)
Set the track identifier to use in all logs.
static createLoggingHandler($handler=null)
static defer($level, $message, $stats)
Defer a message for later logging.
static popErrorMask()
Pop an error mask.
static flush()
Flush any pending log messages to the logging handler.
static maskErrors($mask)
Disable error reporting for the given log levels.
static getInstance($instancename='simplesaml')
Get a configuration file by its instance name.
static getSessionFromRequest()
Retrieves the current session.
error($a_errmsg)
set error message @access public
catch(Exception $e) $message
Attribute-related utility methods.
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']