如何在特殊情况下忽略自定义日志记录处理程序?

问题描述 投票:0回答:2

我编写了自定义处理程序,将日志消息放入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库正确连接时,我才想使用此处理程序。否则我想忽略这个...

python logging mysql-python
2个回答
1
投票

使用有效的模拟进行编辑:


0
投票

对我有用的解决方案。我知道它并不优雅,但可以。

© www.soinside.com 2019 - 2024. All rights reserved.