Search code examples
pythonloggingsystemd

Log Python Systemd output to log file


I run my python script as a systemd service, it is defined in the following .service file:

[Unit]
Description=MyService
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/username/projects/website_notifier/run_service.py

[Install]
After=multi-user.target

In my run_service.py file I then log output using the logging module:

import logging

logging.basicConfig(filename=settings['log_file_name'], level=logging.INFO)
logging.info("Starting notifier service at " + str(datetime.utcnow()))

The issue is that this information is not being logged to my log file when I run I start my file through systemctl

Now, I know that generally systemd gets output to journalctl, I don't want this. I want to be able to access this log through another script that does not run with administrator priviliges.

How can I make this happen?


Solution

  • I've since switched to using Loguru for logging and it seems far more intuitive and useable.

    Also, adding the following to .service file makes sure the logging is not buffered and is real time:

    [Service]
    Environment=PYTHONUNBUFFERED=1