Я написал собственный обработчик, который помещает сообщения журнала в базу данных MySQL. Я хочу использовать этот обработчик, только если я правильно подключился с использованием библиотеки mysql -connector python. В противном случае я хочу опустить этот обработчик.
class LogDBHandler(logging.Handler):
"""Customized logging handler that puts logs to the database."""
def __init__(self):
super().__init__()
self.table_name = 'log'
self.counter = 0
self.chunk = []
self.sql_conn, self.sql_cursor = self.connect_to_db()
# create log table if doesn't exist
try:
self.create_table()
except mysql.connector.errors.ProgrammingError:
pass
@staticmethod
def connect_to_db():
"""Connect to MySQL database to perform logging."""
credentials = {
"user": os.environ.get("DARWIN_DB_USER"),
"password": os.environ.get("DARWIN_DB_PASSWORD"),
"host": os.environ.get("DARWIN_DB_HOST", "127.0.0.1"),
"port": os.environ.get("DARWIN_DB_PORT", "3306"),
"database": os.environ.get("DARWIN_DB_NAME"),
}
db = mysql.connector.connect(**credentials)
cursor = db.cursor()
return db, cursor
...
Это файл конфигурации регистрации, где я храню все регистраторы, обработчики и т. Д. c.
[loggers]
keys=root
[handlers]
keys=root, db
[formatters]
keys=formatter
[logger_root]
level=DEBUG
handlers=root, db
[handler_root]
class=FileHandler
level=DEBUG
formatter=formatter
args=('darwin.log', 'w')
[handler_db]
class=libs.logger.LogDBHandler
level=DEBUG
formatter=formatter
args=()
[formatter_formatter]
format=%(asctime)s - %(name)-12s - %(levelname)-8s - %(message)s
Все отлично работает, если учетные данные базы данных действительны. Если они не правы, mysql.connector.errors.ProgrammingError
исключение. Вместо того, чтобы закрывать всю программу, я хотел бы опустить этот пользовательский обработчик, если self.connect_to_db()
вызывает исключение. Есть идеи, как этого добиться?
Заранее спасибо;)