modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2023-12-28 15:56:24 +04:00
parent 9a1f0ae25e
commit 1c5674558b
4 changed files with 46 additions and 5 deletions

View File

@ -2,5 +2,7 @@
* [ ] possibilité de paramétrer le nom du fichier destination pour faire une * [ ] possibilité de paramétrer le nom du fichier destination pour faire une
rotation des logs rotation des logs
* [ ] lors de la rotation, si l'ouverture du nouveau fichier échoue, continuer
à écrire dans l'ancien fichier
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -80,6 +80,7 @@ class StdOutput {
function resetParams(?array $params=null): void { function resetParams(?array $params=null): void {
$output = cl::get($params, "output"); $output = cl::get($params, "output");
$maskErrors = null;
$color = cl::get($params, "color"); $color = cl::get($params, "color");
$filterTags = cl::get($params, "filter_tags"); $filterTags = cl::get($params, "filter_tags");
$indent = cl::get($params, "indent"); $indent = cl::get($params, "indent");
@ -92,7 +93,10 @@ class StdOutput {
$outf = STDERR; $outf = STDERR;
} elseif (!is_resource($output)) { } elseif (!is_resource($output)) {
# si $outf est un nom de fichier, vérifier que l'ouverture se fait sans # si $outf est un nom de fichier, vérifier que l'ouverture se fait sans
# erreur. à partir de là, plus aucune gestion d'erreur n'est faite # erreur. à partir de là, plus aucune gestion d'erreur n'est faite, à
# part afficher les erreurs d'écriture la première fois qu'elles se
# produisent
$maskErrors = false;
$outf = @fopen($output, "ab"); $outf = @fopen($output, "ab");
if ($outf === false) { if ($outf === false) {
$error = error_get_last(); $error = error_get_last();
@ -105,6 +109,7 @@ class StdOutput {
$outf = $output; $outf = $output;
} }
$this->outf = $outf; $this->outf = $outf;
$this->maskErrors = $maskErrors;
if ($color === null) $color = stream_isatty($outf); if ($color === null) $color = stream_isatty($outf);
if ($flush === null) $flush = false; if ($flush === null) $flush = false;
} }
@ -117,6 +122,9 @@ class StdOutput {
/** @var resource */ /** @var resource */
protected $outf; protected $outf;
/** @var bool faut-il masquer les erreurs d'écriture? */
protected $maskErrors;
/** @var bool faut-il autoriser la sortie en couleur? */ /** @var bool faut-il autoriser la sortie en couleur? */
protected $color; protected $color;
@ -220,14 +228,26 @@ class StdOutput {
return $lines; return $lines;
} }
private function _fwrite($outf, string $data): void {
if ($this->maskErrors === null) {
# masquer les erreurs d'écriture en permanence
@fwrite($outf, $data);
return;
}
# masquer uniquement la première erreur, jusqu'à ce que l'erreur disparaisse
if ($this->maskErrors) $r = @fwrite($outf, $data);
else $r = fwrite($outf, $data);
$this->maskErrors = $r === false;
}
function writeLines($indent, array $lines, bool $addNl=false): void { function writeLines($indent, array $lines, bool $addNl=false): void {
$outf = $this->outf; $outf = $this->outf;
foreach ($lines as $line) { foreach ($lines as $line) {
if ($indent !== null) fwrite($outf, $indent); if ($indent !== null) $this->_fwrite($outf, $indent);
fwrite($outf, $line); $this->_fwrite($outf, $line);
if ($addNl) fwrite($outf, "\n"); if ($addNl) $this->_fwrite($outf, "\n");
} }
if ($this->flush) fflush($outf); if ($this->flush) @fflush($outf);
} }
function write(...$values): void { function write(...$values): void {

1
tbin/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/output-forever.log

18
tbin/test-output-forever.php Executable file
View File

@ -0,0 +1,18 @@
#!/usr/bin/php
<?php
require(__DIR__.'/../vendor/autoload.php');
use nulib\UserException;
use nur\sery\output\std\StdMessenger;
use nur\sery\output\msg;
msg::set_messenger(new StdMessenger(), new StdMessenger([
"output" => "output-forever.log",
]));
$index = 1;
while (true) {
msg::info("info $index");
$index++;
sleep(1);
}