В python я могу записать журнал в консоль, но он не записывается в файл - PullRequest
1 голос
/ 10 апреля 2020
import logging 
#Create and configure logger 
logging.basicConfig(filename="newfile.txt", format='%(asctime)s %(message)s',filemode='w') 
logging.debug("Harmless debug Message") 
logging.info("Just an information") 
logging.warning("Its a Warning") 
logging.error("Did you try to divide by zero") 
logging.critical("Internet is down") 

В консоли выводится вся эта информация. Его никогда не записывается в файл. Очень благодарен тем, кто помогает мне разобраться в этом. Поиск в inte rnet с утра перепробовал все возможности, но все равно логи не записываются в файл

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Создайте новый регистратор с нужными обработчиками потоков и файлов:

import logger, sys
logger = logging.Logger('AmazeballsLogger')
#Stream/console output
logger.handler = logging.StreamHandler(sys.stdout)
logger.handler.setLevel(logging.WARNING)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
logger.handler.setFormatter(formatter)
logger.addHandler(self.handler)
#File output
fh = logging.FileHandler("test.log")
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
logger.addHandler(fh)

И вы готовы принять его за вращение:

print(logger.handlers)

logger.critical("critical")
logger.error("error")
logger.warning("warning")
logger.info("info")
logger.debug("debug")

Только со следующими выводами консоли показывая ПРЕДУПРЕЖДЕНИЕ и выше:

[<StreamHandler stdout (WARNING)>, <FileHandler C:\Users\...\test.log (DEBUG)>]
2020-04-13 17:52:57,729 - CRITICAL - critical
2020-04-13 17:52:57,731 - ERROR - error
2020-04-13 17:52:57,734 - WARNING - warning

Пока test.log содержит все уровни:

2020-04-13 17:52:57,729 - AmazeballsLogger - CRITICAL - critical
2020-04-13 17:52:57,731 - AmazeballsLogger - ERROR - error
2020-04-13 17:52:57,734 - AmazeballsLogger - WARNING - warning
2020-04-13 17:52:57,736 - AmazeballsLogger - INFO - info
2020-04-13 17:52:57,736 - AmazeballsLogger - DEBUG - debug

Ключ к пониманию того, как обработчики ведения журнала работают, и проверке, используйте правильные уровни (как в ячейках кода выше, просто напечатайте logger.handlers). Кроме того, перезапись базовой конфигурации c - это плохая практика, которая может привести к проблемам при запуске нескольких регистраторов в одной среде python. Я рекомендую это видео , оно проливает свет на обработчики потоков / файлов в журнале python.

1 голос
/ 10 апреля 2020

Я получил этот пример из документации

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='myapp.log',
                    filemode='w')
logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')

и примеров, которые я видел в Интернете, все они создают файл .log. Поэтому попробуйте изменить расширение файла с txt на log

...