mirror of
https://github.com/camptocamp/odoo-cloud-platform.git
synced 2026-06-23 18:04:34 +00:00
logging_json: enhance logging output by splitting levels into stdout and stderr
This commit is contained in:
committed by
Iván Todorovich
co-authored by
Iván Todorovich
parent
9b31b7c235
commit
1d68c883a7
@@ -12,3 +12,7 @@ The json logging is activated with the environment variable
|
|||||||
In order to have the logs from the start of the server, you should add
|
In order to have the logs from the start of the server, you should add
|
||||||
``logging_json`` in the ``--load`` flag or in the ``server_wide_modules``
|
``logging_json`` in the ``--load`` flag or in the ``server_wide_modules``
|
||||||
option in the configuration file.
|
option in the configuration file.
|
||||||
|
|
||||||
|
You can split the logs in stderr and stdout with the environment variable
|
||||||
|
``ODOO_LOGGING_JSON_STDERR`` set to ``1``. In this case, the logs with a level
|
||||||
|
of WARNING or above will be sent to stderr, the others to stdout.
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@@ -38,6 +39,37 @@ if is_true(os.environ.get("ODOO_LOGGING_JSON")):
|
|||||||
"%(asctime)s %(pid)s %(levelname)s %(dbname)s %(name)s: %(message)s"
|
"%(asctime)s %(pid)s %(levelname)s %(dbname)s %(name)s: %(message)s"
|
||||||
)
|
)
|
||||||
formatter = OdooJsonFormatter(formatted_message)
|
formatter = OdooJsonFormatter(formatted_message)
|
||||||
|
|
||||||
|
if is_true(os.environ.get("ODOO_LOGGING_JSON_STDERR")):
|
||||||
|
|
||||||
|
class MaxLevelFilter(logging.Filter):
|
||||||
|
def __init__(self, max_level):
|
||||||
|
self.max_level = max_level
|
||||||
|
|
||||||
|
def filter(self, record):
|
||||||
|
return record.levelno < self.max_level
|
||||||
|
|
||||||
|
# keep the original level
|
||||||
|
root_logger = logging.getLogger()
|
||||||
|
original_level = root_logger.level
|
||||||
|
|
||||||
|
# Split lower levels into stdout
|
||||||
|
stdout_handler = logging.StreamHandler(sys.stdout)
|
||||||
|
stdout_handler.setLevel(logging.NOTSET)
|
||||||
|
stdout_handler.addFilter(MaxLevelFilter(logging.WARNING))
|
||||||
|
stdout_handler.setFormatter(formatter)
|
||||||
|
|
||||||
|
# Split WARNING and upper into stderr
|
||||||
|
stderr_handler = logging.StreamHandler(sys.stderr)
|
||||||
|
stderr_handler.setLevel(logging.WARNING)
|
||||||
|
stderr_handler.setFormatter(formatter)
|
||||||
|
|
||||||
|
# Replace handlers
|
||||||
|
root_logger.handlers = []
|
||||||
|
root_logger.setLevel(original_level)
|
||||||
|
root_logger.addHandler(stdout_handler)
|
||||||
|
root_logger.addHandler(stderr_handler)
|
||||||
|
else:
|
||||||
logging.getLogger().handlers[0].formatter = formatter
|
logging.getLogger().handlers[0].formatter = formatter
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user