Мне нужно отладить некоторый устаревший код, и я хочу только напечатать некоторую информацию в файле, который не будет мешать другим местам в базе кода. Самый грубый способ, который я нашел до сих пор, это что-то вроде:
def my_func():
f = open('/tmp/log.txt', 'a') # help with logging stuff
f.write('Here is my crude local logger.')
# some code
logger.log('Hello') # our 'Normal logger' that goes to Splunk
# so I don't think I can modify this
# safely without side-effects?
Однако мне нравятся все «дополнительные» вещи, которые добавляет модуль журналирования, такие как номера строк, время, функции и т. д. Как лучше всего добавить локальный регистратор, чтобы он делал то, что может делать обычный регистратор?
🤔 А знаете ли вы, что...
Python поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.
Создать локальный логгер можно с помощью того же модуля logging
:
import logging
def my_func():
local_logger = logging.getLogger('my_func_logger')
# set custom handlers on local_logger, maybe even control creation with a function
# or some env vars
# some code
local_logger.log('Hello')
logger
по-прежнему твой друг. Вы можете настроить его по своему вкусу; Для этого я буду обращаться к практическому руководству по Python.
Одной из частей создания собственного Logger
является настройка Formatter
. Один из таких способов сделать это не представляет особых сложностей:
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
один из примеров.
Сам Formatter
прост. Конструктор имеет три необязательных аргумента: строковый формат, строку формата даты и индикатор стиля.
Formatter
— это место, куда вам следует обратиться, чтобы узнать номера строк и другую информацию, которую вы хотите разместить.
Просто заметка о создании :
Обратите внимание, что экземпляры Loggers НИКОГДА не должны создаваться напрямую, а всегда через функцию уровня модуля logging.getLogger(name). Несколько вызовов getLogger() с одним и тем же именем всегда будут возвращать ссылку на один и тот же объект Logger.