Когда вы используете только logging
, вы фактически используете единый корневой регистратор, созданный во время import logging
.Вы можете использовать его с несколькими обработчиками.Например:
# 1. logging to file
filename = (
'log_file{}.log'
.format(
dt.datetime.today().strftime("_date_%Y-%m-%d_time_%H-%M-%S")))
# path to log folder.
path = os.path.join(os.getcwd(), 'logs')
# create log folder if it does not exist.
if not os.path.isdir(path):
os.makedirs(path, exist_ok=True)
to_file = logging.FileHandler(os.path.join(path, filename))
to_file.addFilter(lambda x: x.levelno in [20, 40])
# 2. logging to console
to_console = logging.StreamHandler()
to_console.addFilter(lambda x: x.levelno in [20, 21, 40])
# 3. root logger configuration
logging.basicConfig(
level=10,
datefmt='%Y-%m-%d %H:%M:%S',
format='[%(asctime)s]:%(threadName)s:%(levelname)s:%(message)s',
handlers=[to_console, to_file])
Если вы хотите войти в 2 файла, просто создайте 2 обработчика logging.FileHandler(...)
, зарегистрируйте их и, как обычно, используйте только что настроенный корневой регистратор:
logging.info('Some info')
Другой вариант - создать 2 регистратора.Обычно это нужно делать, если вы хотите разделить несколько источников сообщений журнала.