Подтвердить что ты не робот

Python с использованием метода basicConfig для входа в консоль и файл

Я не знаю, почему этот код печатает на экране, но не в файл? Файл "example1.log" создан, но там ничего не написано.

#!/usr/bin/env python3
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(message)s',
                    handlers=[logging.FileHandler("example1.log"),
                              logging.StreamHandler()])
logging.debug('This message should go to the log file and to the console')
logging.info('So should this')
logging.warning('And this, too')

Я обманул эту проблему, создав объект регистрации (пример кода), но он продолжает прослушивать меня, почему метод basicConfig() не прошел

PS. Если я изменил вызов basicConfig на:

logging.basicConfig(level=logging.DEBUG,
                    filename="example2.log",
                    format='%(asctime)s %(message)s',
                    handlers=[logging.StreamHandler()])

Затем все журналы находятся в файле и ничего не отображается в консоли

4b9b3361

Ответ 1

Я не могу воспроизвести его на Python 3.3. Сообщения записываются как на экран, так и на 'example2.log'. На Python < 3.3 он создает файл, но он пуст.

Код:

from logging_tree import printout  # pip install logging_tree
printout()

показывает, что FileHandler() не привязан к корневому регистратору на Python < 3.3.

Документы для logging.basicConfig() говорят, что в Python 3.3 добавлен аргумент handlers. Аргумент handlers не упоминается в документации Python 3.2.

Ответ 2

Попробуйте эту работу отлично (протестировано в python 2.7) для консоли и файла

# set up logging to file
logging.basicConfig(
     filename='twitter_effect.log',
     level=logging.INFO, 
     format= '[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s',
     datefmt='%H:%M:%S'
 )

# set up logging to console
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

logger = logging.getLogger(__name__)

Ответ 3

В приведенном ниже примере вы можете указать назначение журнала в зависимости от его уровня. Например, приведенный ниже код позволяет всем журналам на уровне INFO перейти в файл журнала, и все выше уровня ОШИБКА отправляются на консоль.

import logging
logging.root.handlers = []
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO , filename='ex.log')

# set up logging to console
console = logging.StreamHandler()
console.setLevel(logging.ERROR)
# set a format which is simpler for console use
formatter = logging.Formatter('%(asctime)s : %(levelname)s : %(message)s')
console.setFormatter(formatter)
logging.getLogger("").addHandler(console)

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.exception('exp')