syslog funktioniert anscheind korrekt

This commit is contained in:
bernd 2021-03-01 23:22:05 +01:00
parent 8ae028dfaf
commit 2a56eabf5d
2 changed files with 28 additions and 48 deletions

View file

@ -55,8 +55,8 @@ class Config {
return $password; return $password;
} }
public function getLogLevel(): string { public function getLogLevel(): int {
$loglevel = strtoupper($this->config['loglevel']) ?? "INFO"; $loglevel = strtoupper($this->config['loglevel']) ?? LOG_INFO;
return $loglevel; return $loglevel;
} }

View file

@ -18,22 +18,13 @@ class Logger {
* angefragte Key im Array existiert. * angefragte Key im Array existiert.
*/ */
private $levelnumbers = array(
LOG_ALERT => 10,
LOG_CRIT => 20,
LOG_ERR => 30,
LOG_WARNING => 40,
LOG_NOTICE => 50,
LOG_INFO => 60,
LOG_DEBUG => 70,
);
public $loglevel = LOG_INFO; public $loglevel = LOG_INFO;
private $app = "matrix-register"; private $app = "matrix-register";
private $logopen = false; private $logopen = false;
public function __construct() { public function __construct() {
if (openlog($this->app, LOG_NDELAY | LOG_PID, LOG_SYSLOG) === true) { if (openlog($this->app, LOG_PID | LOG_PERROR , LOG_SYSLOG) === true) {
$this->logopen = true; $this->logopen = true;
} }
} }
@ -71,60 +62,49 @@ class Logger {
$this->logMsg(LOG_DEBUG, $msg); $this->logMsg(LOG_DEBUG, $msg);
} }
private function addLevel(string $prio, string $msg): string { public function setLogLevel(int $level) {
/** /**
* Ich möchte die Priorität der Meldung mit im Log haben. Die * Funktion zum Setzen des Loglevels. Mögliche Werte sind
* Funktion setzt ein Flag vor die Meldung. * LOG_EMERG(0), LOG_ALERT(1), LOG_CRIT(2), LOG_ERR(3),
* LOG_WARNING(4), LOG_NOTICE(5), LOG_INFO(6) oder LOG_DEBUG(7).
* Es wird geprüft, ob das übergebene Level gültig ist.
*/ */
$text = "[$prio] "."$msg"; if (in_array($level, array(1, 2, 3, 4, 5, 6, 7, 8)) === true) {
return $text;
}
public function setLogLevel(string $level) {
/**
* Funktion zum Setzen des Loglevels. Mögliche Werte sind LOG_EMERG,
* LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO
* oder LOG_DEBUG. Es wird geprüft, ob das übergebene Level gültig
* ist.
*/
if (array_key_exists($level, $this->levelnumbers) === true) {
$this->loglevel = $level; $this->loglevel = $level;
$this->d("Loglevel set to {$level}"); $this->d("Loglevel set to {$this->loglevel}");
} else { } else {
echo "{$level} is not a valid loglevel."; echo "{$level} is not a valid loglevel.";
} }
} }
private function logMsg(string $level, string $msg) { private function addLevel(int $level, string $msg): string {
/** /**
* Entscheidet, ob eine Meldung ausgegeben wird oder nicht. Dazu * Stellt der Meldung das Loglevel voran.
*/
$text = "[$level] ".$msg;
return $text;
}
private function logMsg(string $msglevel, string $msg) {
/**
* Übergibt die Meldung an die Funktion syslog. Vorher wird
* entschieden, ob eine Meldung ausgegeben wird oder nicht. Dazu
* wird geschaut, ob das Loglevel höher ist als das Messagelevel. * wird geschaut, ob das Loglevel höher ist als das Messagelevel.
*/ */
$msglevel = $this->levelnumbers[$level]; $msg = $this->addLevel($msglevel, $msg);
$loglevel = $this->levelnumbers[$this->loglevel]; if ($this->loglevel >= $msglevel) {
if ($loglevel >= $msglevel) { syslog($msglevel, $msg);
$msg = $this->addLevel($level, $msg); } else {
$this->sendToLog($level, $msg); syslog($msglevel, $msg);
} }
} }
private function sendToLog(string $level, string $msg) {
/**
* Schickt die Logmeldungen an das Syslog. Der erste Parameter ist
* das Loglevel. Der zweite
* Parameter ist die Logmeldung.
*/
syslog($level, $msg);
}
} }