- $logger = new Monolog\Logger($channel);
- $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
- $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
- $logger->pushProcessor(new Monolog\Processor\UidProcessor());
- $logger->pushProcessor(new FriendicaIntrospectionProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger']));
-
- if (isset($config)) {
- $debugging = $config->get('system', 'debugging');
- $stream = $config->get('system', 'logfile');
- $level = $config->get('system', 'loglevel');
-
- if ($debugging) {
- static::addStreamHandler($logger, $stream, $level);
- }
+ if (empty($config->get('system', 'debugging', false))) {
+ $logger = new VoidLogger();
+ $database->setLogger($logger);
+ return $logger;
+ }
+
+ $introspection = new Introspection(self::$ignoreClassList);
+ $level = $config->get('system', 'loglevel');
+ $loglevel = self::mapLegacyConfigDebugLevel((string)$level);
+
+ switch ($config->get('system', 'logger_config', 'stream')) {
+ case 'monolog':
+ $loggerTimeZone = new \DateTimeZone('UTC');
+ Monolog\Logger::setTimezone($loggerTimeZone);
+
+ $logger = new Monolog\Logger($this->channel);
+ $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
+ $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
+ $logger->pushProcessor(new Monolog\Processor\UidProcessor());
+ $logger->pushProcessor(new IntrospectionProcessor($introspection, LogLevel::DEBUG));
+
+ $stream = $config->get('system', 'logfile');
+
+ // just add a stream in case it's either writable or not file
+ if (!is_file($stream) || is_writable($stream)) {
+ try {
+ static::addStreamHandler($logger, $stream, $loglevel);
+ } catch (\Throwable $e) {
+ // No Logger ..
+ $logger = new VoidLogger();
+ }
+ }
+ break;
+
+ case 'syslog':
+ try {
+ $logger = new SyslogLogger($this->channel, $introspection, $loglevel);
+ } catch (\Throwable $e) {
+ // No logger ...
+ $logger = new VoidLogger();
+ }
+ break;
+
+ case 'stream':
+ default:
+ $stream = $config->get('system', 'logfile');
+ // just add a stream in case it's either writable or not file
+ if (!is_file($stream) || is_writable($stream)) {
+ try {
+ $logger = new StreamLogger($this->channel, $stream, $introspection, $fileSystem, $loglevel);
+ } catch (\Throwable $t) {
+ // No logger ...
+ $logger = new VoidLogger();
+ }
+ } else {
+ $logger = new VoidLogger();
+ }
+ break;
+ }
+
+ $profiling = $config->get('system', 'profiling', false);
+
+ // In case profiling is enabled, wrap the ProfilerLogger around the current logger
+ if (isset($profiling) && $profiling !== false) {
+ $logger = new ProfilerLogger($logger, $profiler);