Add logging to syslog and journald
This commit is contained in:
		| @@ -1,9 +1,12 @@ | ||||
| import logging | ||||
| import sys | ||||
|  | ||||
| from logging.handlers import RotatingFileHandler | ||||
| from logging import Formatter | ||||
| from logging.handlers import RotatingFileHandler, SysLogHandler | ||||
| from typing import Any, Dict, List | ||||
|  | ||||
| from freqtrade import OperationalException | ||||
|  | ||||
|  | ||||
| logger = logging.getLogger(__name__) | ||||
|  | ||||
| @@ -36,8 +39,36 @@ def setup_logging(config: Dict[str, Any]) -> None: | ||||
|     # Log to stdout, not stderr | ||||
|     log_handlers: List[logging.Handler] = [logging.StreamHandler(sys.stdout)] | ||||
|  | ||||
|     if config.get('logfile'): | ||||
|         log_handlers.append(RotatingFileHandler(config['logfile'], | ||||
|     logfile = config.get('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 | ||||
|                                                     backupCount=10)) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user