Add logging to syslog and journald
This commit is contained in:
		| @@ -1,9 +1,12 @@ | |||||||
| import logging | import logging | ||||||
| import sys | import sys | ||||||
|  |  | ||||||
| from logging.handlers import RotatingFileHandler | from logging import Formatter | ||||||
|  | from logging.handlers import RotatingFileHandler, SysLogHandler | ||||||
| from typing import Any, Dict, List | from typing import Any, Dict, List | ||||||
|  |  | ||||||
|  | from freqtrade import OperationalException | ||||||
|  |  | ||||||
|  |  | ||||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||||
|  |  | ||||||
| @@ -36,8 +39,36 @@ def setup_logging(config: Dict[str, Any]) -> None: | |||||||
|     # Log to stdout, not stderr |     # Log to stdout, not stderr | ||||||
|     log_handlers: List[logging.Handler] = [logging.StreamHandler(sys.stdout)] |     log_handlers: List[logging.Handler] = [logging.StreamHandler(sys.stdout)] | ||||||
|  |  | ||||||
|     if config.get('logfile'): |     logfile = config.get('logfile') | ||||||
|         log_handlers.append(RotatingFileHandler(config['logfile'], |     if logfile: | ||||||
|  |         s = logfile.split(':') | ||||||
|  |         if s[0] == 'syslog': | ||||||
|  |             # Address can be either a string (socket filename) for Unix domain socket or | ||||||
|  |             # a tuple (hostname, port) for UDP socket. | ||||||
|  |             # Address can be omitted (i.e. simple 'syslog' used as the value of | ||||||
|  |             # config['logfilename']), which defaults to '/dev/log', applicable for most | ||||||
|  |             # of the systems. | ||||||
|  |             address = (s[1], int(s[2])) if len(s) > 2 else s[1] if len(s) > 1 else '/dev/log' | ||||||
|  |             handler = SysLogHandler(address=address) | ||||||
|  |             # No datetime field for logging into syslog, to allow syslog | ||||||
|  |             # to perform reduction of repeating messages if this is set in the | ||||||
|  |             # syslog config. The messages should be equal for this. | ||||||
|  |             handler.setFormatter(Formatter('%(name)s - %(levelname)s - %(message)s')) | ||||||
|  |             log_handlers.append(handler) | ||||||
|  |         elif s[0] == 'journald': | ||||||
|  |             try: | ||||||
|  |                 from systemd.journal import JournaldLogHandler | ||||||
|  |             except ImportError: | ||||||
|  |                 raise OperationalException("You need the systemd python package be installed in " | ||||||
|  |                                            "order to use logging to journald.") | ||||||
|  |             handler = JournaldLogHandler() | ||||||
|  |             # No datetime field for logging into journald, to allow syslog | ||||||
|  |             # to perform reduction of repeating messages if this is set in the | ||||||
|  |             # syslog config. The messages should be equal for this. | ||||||
|  |             handler.setFormatter(Formatter('%(name)s - %(levelname)s - %(message)s')) | ||||||
|  |             log_handlers.append(handler) | ||||||
|  |         else: | ||||||
|  |             log_handlers.append(RotatingFileHandler(logfile, | ||||||
|                                                     maxBytes=1024 * 1024,  # 1Mb |                                                     maxBytes=1024 * 1024,  # 1Mb | ||||||
|                                                     backupCount=10)) |                                                     backupCount=10)) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user