2020-03-11 20:29:08 +00:00
< ? php
2020-03-15 21:21:11 +00:00
2021-10-10 09:26:18 +01:00
declare ( strict_types = 1 );
2020-05-20 17:53:53 +01:00
// {{{ License
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
// }}}
2020-03-21 20:18:05 +00:00
/**
* GNU social 's logger wrapper around Symfony' s ,
* keeping our old static interface , which is more convenient and just as powerful
*
* @ package GNUsocial
* @ category Log
*
2021-02-19 23:29:43 +00:00
* @ author Hugo Sales < hugo @ hsal . es >
* @ copyright 2020 - 2021 Free Software Foundation , Inc http :// www . fsf . org
2020-03-21 20:18:05 +00:00
* @ license https :// www . gnu . org / licenses / agpl . html GNU AGPL v3 or later
*/
2020-05-11 19:15:08 +01:00
namespace App\Core ;
2020-03-11 20:29:08 +00:00
2021-08-07 19:21:20 +01:00
use App\Util\Exception\ServerException ;
2021-10-10 09:26:18 +01:00
use Exception ;
2020-03-11 20:29:08 +00:00
use Psr\Log\LoggerInterface ;
2021-09-06 20:59:36 +01:00
/**
* @ mixin LoggerInterface
2021-10-27 04:21:53 +01:00
*
* @ method static void debug ( string $message , array $context = []) // (100): Detailed debug information.
* @ method static void info ( string $message , array $context = []) // (200): Interesting events. E.g.: SQL logs.
* @ method static void notice ( string $message , array $context = []) // (250): Normal but significant events.
* @ method static void warning ( string $message , array $context = []) // (300): Exceptional occurrences that are not errors. Examples: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.
* @ method static void error ( string $message , array $context = []) // (400): Runtime errors that do not require immediate action but should typically be logged and monitored.
* @ method static void critical ( string $message , array $context = []) // (500): Critical conditions. Example: Application component unavailable, unexpected exception.
* @ method static void alert ( string $message , array $context = []) // (550): Action must be taken immediately. Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake the sysadmin up.
* @ method static void emergency ( string $message , array $context = []) // (600): Emergency: system is unusable.
2021-09-06 20:59:36 +01:00
*/
2020-07-10 00:46:59 +01:00
abstract class Log
2020-03-11 20:29:08 +00:00
{
private static ? LoggerInterface $logger ;
public static function setLogger ( $l ) : void
{
self :: $logger = $l ;
}
2020-03-15 21:21:11 +00:00
2021-08-08 01:37:02 +01:00
/**
* Log a critical error when a really unexpected exception occured . This indicates a bug in the software
*
* @ throws ServerException
* @ codeCoverageIgnore
*/
2021-10-10 09:26:18 +01:00
public static function unexpected_exception ( Exception $e )
2021-08-07 19:21:20 +01:00
{
2021-10-10 09:26:18 +01:00
$backtrace = debug_backtrace ( \DEBUG_BACKTRACE_IGNORE_ARGS , 2 );
self :: critical ( 'Unexpected exception of class: "' . \get_class ( $e ) . '" was thrown in ' . \get_called_class () . '::' . $backtrace [ 1 ][ 'function' ]);
2021-08-07 19:21:20 +01:00
throw new ServerException ( 'Unexpected exception' , 500 , $e );
}
2020-03-21 20:18:05 +00:00
/**
* Simple static wrappers around Monolog ' s functions
2020-05-10 21:43:15 +01:00
*/
2020-07-10 00:46:59 +01:00
public static function __callStatic ( string $name , array $args )
2020-03-11 20:29:08 +00:00
{
2021-04-05 14:43:32 +01:00
if ( isset ( self :: $logger )) {
return self :: $logger -> { $name }( ... $args );
2021-07-21 17:43:35 +01:00
} else {
// @codeCoverageIgnoreStart
2021-10-10 09:26:18 +01:00
return ;
2021-07-21 17:43:35 +01:00
// @codeCoverageIgnoreEnd
2021-04-05 14:43:32 +01:00
}
2020-03-11 20:29:08 +00:00
}
}