Как сделать два файла журнала, используя модуль регистрации в Python? - PullRequest
0 голосов
/ 10 декабря 2018

Привет, ребята!

 #this is values from xml file.
    clientID = logObject['meta']['clientID']
    authToken = logObject['meta']['authToken']
    logType = logObject['logType']

    FORMAT = '%(asctime)-15s %(logType)s %(process)d %(user)-8s %(message)s'
    d = {'logType': logType ,'user': getpass.getuser()}
    #line creating two log files(access.log and error.log) 
    logging.basicConfig(filename = 'access.log', filemode = 'w', format=FORMAT)
    logging.basicConfig(filename = 'error.log', filemode = 'w', format=FORMAT)

    if(clientID == ""):
        # logger = setup_logger('first_logger', 'access.log',logType)
        logger.warning('Please Enter clientID', extra=d)

Это мой пример кода.мне нужно создать два файла, которые я упомянул.но проблема в том, что он создает только один файл каждый раз, и сообщения отправляются только в этот файл.Поэтому я хочу, чтобы, если я упомяну logger.error ("msg") или logger.warning ("msg"), то он должен перейти к этому файлу журнала.

1 Ответ

0 голосов
/ 10 декабря 2018

Когда вы используете только 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 регистратора.Обычно это нужно делать, если вы хотите разделить несколько источников сообщений журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...