Add Fallback in case the logfile isn't accessible.

- Fixes https://github.com/friendica/friendica/issues/7756#issuecomment-544227862
This commit is contained in:
Philipp Holzer 2019-10-21 21:53:55 +02:00
parent 2edccf9341
commit 0e84a843a4
No known key found for this signature in database
GPG key ID: D8365C3D36B77D90
2 changed files with 23 additions and 13 deletions

View file

@ -53,9 +53,6 @@ class LoggerFactory
* @param Profiler $profiler The profiler of the app
*
* @return LoggerInterface The PSR-3 compliant logger instance
*
* @throws \Exception
* @throws InternalServerErrorException
*/
public function create( Database $database, Configuration $config, Profiler $profiler)
{
@ -84,12 +81,22 @@ class LoggerFactory
// just add a stream in case it's either writable or not file
if (!is_file($stream) || is_writable($stream)) {
static::addStreamHandler($logger, $stream, $loglevel);
try {
static::addStreamHandler($logger, $stream, $loglevel);
} catch (\Throwable $e) {
// No Logger ..
$logger = new VoidLogger();
}
}
break;
case 'syslog':
$logger = new SyslogLogger($this->channel, $introspection, $loglevel);
try {
$logger = new SyslogLogger($this->channel, $introspection, $loglevel);
} catch (\Throwable $e) {
// No logger ...
$logger = new VoidLogger();
}
break;
case 'stream':
@ -97,7 +104,12 @@ class LoggerFactory
$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)) {
$logger = new StreamLogger($this->channel, $stream, $introspection, $loglevel);
try {
$logger = new StreamLogger($this->channel, $stream, $introspection, $loglevel);
} catch (\Throwable $t) {
// No logger ...
$logger = new VoidLogger();
}
} else {
$logger = new VoidLogger();
}
@ -210,11 +222,10 @@ class LoggerFactory
case "3":
return LogLevel::INFO;
// legacy DATA
case "4":
return LogLevel::DEBUG;
// legacy ALL
case "5":
return LogLevel::DEBUG;
// legacy ALL
case "4":
return LogLevel::DEBUG;
// default if nothing set
default:
return $level;
@ -230,7 +241,6 @@ class LoggerFactory
*
* @return void
*
* @throws InternalServerErrorException if the logger is incompatible to the logger factory
* @throws \Exception in case of general failures
*/
public static function addStreamHandler($logger, $stream, $level = LogLevel::NOTICE)
@ -249,8 +259,6 @@ class LoggerFactory
$fileHandler->setFormatter($formatter);
$logger->pushHandler($fileHandler);
} else {
throw new InternalServerErrorException('Logger instance incompatible for MonologFactory');
}
}

View file

@ -81,6 +81,8 @@ class StreamLogger extends AbstractLogger
} else {
throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level));
}
$this->checkStream();
}
public function close()