python-journald-rsyslog がログ書き込みをバッチ処理/遅延処理するように見えるのはなぜですか?

python-journald-rsyslog がログ書き込みをバッチ処理/遅延処理するように見えるのはなぜですか?

Python スクリプトの出力をログに記録するつもりです。次のようになります:

arm@stackoverflow > cat test.py
#!/usr/bin/python
from time import sleep
while True:
        print("Hello")
        sleep(1)

私はログを処理するために標準的な syslog の方法を使用しようとしました。そのため、すべてを次のように送信するように JournalD と SystemD を構成しようとしましたSyslog

arm@stackoverflow > cat /etc/systemd/journald.conf | grep -vP "^#"
[Journal]
ForwardToSyslog=yes

arm@stackoverflow > cat /etc/systemd/system/testservice.service
[Unit]
Description="Test service"
StartLimitIntervalSec=500
StartLimitBurst=10

[Service]
Type=Simple
Restart=on-failure
RestartSec=5s
ExecStart=/home/pi/test.py
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=testservice
   
[Install]
WantedBy=multi-user.target

最後に、Debian のデフォルトの Rsyslog を使用して、ログをいくつかのファイルにルーティングします。

arm@stackoverflow > tail -n1 /etc/rsyslog.conf
if $programname == 'testservice' then /var/log/testservice.log
arm@stackoverflow > sudo touch /var/log/testservice.log && sudo chmod a+rw /var/log

しかし、全体を開始すると、すべてのログがどこかで詰まっているようで、開始後 1 時間で解放されます (大きなデスプールのように)。

arm@stackoverflow > sudo systemctl start testservice.service && sleep 30

それから:

arm@stackoverflow > tail /var/log/testservice.log #nothing

テスト:

arm@stackoverflow > sudo systemctl status testservice.service
● testservice.service - "Test service"
     Loaded: loaded (/etc/systemd/system/testservice.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-02-21 09:20:06 CET; 1min 33s ago
arm@stackoverflow > ps aux | grep test
root     23488  0.0  0.6  13956  5968 ?        Ss   09:20   0:00 /usr/bin/python /home/pi/test.py

これらのログをリアルタイムで取得する方法をご存知ですか?

その他。これはRaspberry Pi OS (ARM) 上のテストサーバーです。

答え1

@meuh のおかげで、-uPython スクリプトにフラグを追加することでうまくいきました。私はそれをシェバン行に追加しました:

#!/usr/bin/python -u

関連情報