Я пытаюсь настроить ведение журнала, в котором я могу войти как в стандартный вывод, так и в файл. Это я выполнил, используя следующий код:
logging.basicConfig(
level=logging.DEBUG, format='%(asctime)-15s %(levelname)-8s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S', handlers=[logging.FileHandler(path), logging.StreamHandler()])
Вывод этого примерно так:
2018-05-02 18:43:33,295 DEBUG Starting new HTTPS connection (1): google.com
2018-05-02 18:43:33,385 DEBUG https://google.com:443 "GET / HTTP/1.1" 301 220
2018-05-02 18:43:33,389 DEBUG Starting new HTTPS connection (1): www.google.com
2018-05-02 18:43:33,490 DEBUG https://www.google.com:443 "GET / HTTP/1.1" 200 None
То, что я пытаюсь сделать, это записать этот вывод в файл не так, как он печатает на стандартный вывод, а как словарь или объект JSON, похожий на что-то вроде этого (сохраняя стандартный вывод в данный момент):
[{'time': '2018-05-02 18:43:33,295', 'level': 'DEBUG', 'message': 'Starting new HTTPS connection (1): google.com'}, {...}, {...}]
Это выполнимо? Я понимаю, что могу опубликовать этот файл журнала после завершения процесса, но я ищу более элегантное решение, потому что определенные вещи, которые я регистрирую, сами по себе являются довольно большими объектами.