diff --git a/webservice/job_monitor.py b/webservice/job_monitor.py
index 12d9ebc125bfb86086ad224b60d0683e7921acee..9023620d6ee0da66d16db94ad2c8b28d55d03a59 100644
--- a/webservice/job_monitor.py
+++ b/webservice/job_monitor.py
@@ -404,6 +404,12 @@ def main(argv=None):
         level=getattr(logging, args.log_level),
         format=fmt
     )
+    # Also log to the journal (via stderr), which keeps its own timestamps
+    streamhandler = logging.StreamHandler()
+    streamhandler.setFormatter(logging.Formatter(
+        '%(name)s - %(levelname)s - [%(filename)s:%(lineno)d] %(message)s'
+    ))
+    logging.getLogger().addHandler(streamhandler)
     # DEBUG logs from kafka-python are very verbose, so we'll turn them off
     logging.getLogger('kafka').setLevel(logging.INFO)
     # Likewise requests_oauthlib
diff --git a/webservice/webservice.py b/webservice/webservice.py
index 3cc2887557ebdedb15a409ce8f1f196ab19f6380..3c9b5056839354a6d935bc2df03a1fc8a76e52c7 100644
--- a/webservice/webservice.py
+++ b/webservice/webservice.py
@@ -1625,6 +1625,12 @@ def main(argv: Optional[List[str]] = None):
         level=getattr(logging, log_level),
         format=fmt
     )
+    # Also log to the journal (via stderr), which keeps its own timestamps
+    streamhandler = logging.StreamHandler()
+    streamhandler.setFormatter(logging.Formatter(
+        '%(name)s - %(levelname)s - [%(filename)s:%(lineno)d] %(message)s'
+    ))
+    logging.getLogger().addHandler(streamhandler)
     # requests_oauthlib DEBUG logs are very verbose, so we'll turn them off
     logging.getLogger('requests_oauthlib').setLevel(logging.INFO)