Моя конфигурация супервизора следующая
[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
logfile_maxbytes=0 ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
user=root
group=root
[program:tornado]
command=python3 tornadoaas.py
directory=/tornado_api
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
loglevel=info
redirect_stderr=true
autorestart=true
stdout_events_enabled=true
stderr_events_enabled=true
user=root
group=root
поэтому я отправляю tornado
журналы на stdout
и stderr
, в то время как я установил supervisord
регистрация процесса на /dev/null
, чтобы избежать записи в консоль - см. здесь .
На производстве я установил уровень ведения журнала на ERROR
. Что происходит при использовании logging.error
Я получаю журналы ошибок дважды в консоли.
Это моя конфигурация Python Logger
def configure_logger(self, name='default'):
""" configure a logger """
dictConfig({
'version': 1,
'formatters': {
'default': {'format': '%(asctime)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'}
},
'handlers': {
'console': {
'level': log_level,
'class': 'logging.StreamHandler',
'formatter': 'default',
'stream': 'ext://sys.stdout'
}
},
'loggers': {
'default': {
'level': log_level,
#'handlers': ['console', 'file']
'handlers': ['console']
}
},
'disable_existing_loggers': False
})
# disable logging propagation to stderr
hn = logging.NullHandler()
hn.setLevel( log_level )
logging.getLogger("tornado.general").addHandler(hn)
logging.getLogger("tornado.application").addHandler(hn)
logging.getLogger("tornado.access").addHandler(hn)
logging.getLogger("tornado.general").propagate = False
logging.getLogger("tornado.application").propagate = False
logging.getLogger("tornado.access").propagate = False
logger = logging.getLogger(name)
return logger
, где
log_level = logging.DEBUG if DIST == 'dev' else logging.ERROR