我编写了自定义处理程序,将日志消息放入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
...
这是日志记录配置文件,我在其中存储所有记录器,处理程序等。>
[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()
引发exception,我不想关闭整个程序,而不想关闭此自定义处理程序。任何想法如何实现这样的事情?
谢谢,)
我编写了自定义处理程序,将日志消息放入MySQL数据库。仅当我使用mysql-connector python库正确连接时,我才想使用此处理程序。否则我想忽略这个...
使用有效的模拟进行编辑:
对我有用的解决方案。我知道它并不优雅,但可以。