Пока писал пару скриптов, понял, что простого print("Ошибка...") мало, особенно если скрипт запускается на сервере и отлаживать вручную неудобно. Сначала попробовал классический модуль logging — он офигенно гнется, можно настроить разное поведение для разных модулей и уровней severity, но бывает, что настройки сложные и их не всегда хочется прописывать для простых проектов.
Что реально помогло — использовать logging с базовой конфигурацией, а для сложных случаев — добавлять обработчики (handlers) и форматтеры, чтобы ошибка попадала и в файл, и в консоль с таймстампом. Из принципов: надо ловить исключения через try-except и в except делать логирование с помощью logger.error, передавая traceback. Это дает возможность потом понять, где именно полетел скрипт.
Ещё видел, что некоторые просто пишут ошибки напрямую в файл с открытием его в append-режиме, но это как костыль, который быстро вылезет боком, если логов много и нужны разные уровни. Вот теперь думаю, стоит ли заморачиваться с внешними библиотеками типа loguru или structlog, либо хватит стандартного logging для большинства задач?
Короче, если нужен простой рабочий вариант, заложите в проект базовый logging с файлом и консолью, и ловите ошибки через except. Кто еще как логирует? Может, есть какие лайфхаки?
Ну вот честно, все эти танцы с logging часто выглядят черезчур для простых скриптов. Базовый logging с файлом и консолью обычно норм, дальше — проще некуда. Внешние библиотеки звучат круто, но для большинства задач стандартный функционал более чем достаточен. Зачем усложнять?