繁体   English   中英

使用 Python 日志记录管理记录器

[英]Managing loggers with Python logging

我正在编写一个服务器应用程序,它应该能够在控制台和日志文件上以不同级别进行日志记录。

问题是,如果设置了 logging.basicConfig() 它将记录到控制台,但它必须在主线程中设置。

也可以使用 logging.basicConfig(filename='logger.log') 设置写入文件。

为控制台日志记录 (logging.StreamHandler()) 或文件日志记录 (logging.FileHandler()) 设置句柄是对 logging.baseconfig() 选项集的补充。

问题是,设置不是独立的。 我的意思是,logging.baseConfig() 的日志级别必须包含 Handler 级别,否则它不会被记录。

因此,如果我将 baseConfig 设置为记录到文件,并将 StreamHandler 设置为记录到控制台,则文件日志级别必须低于控制台级别。 (此外, basicConfig 选项会记录所有其他日志。)

我尝试创建两个句柄,一个用于控制台,一个用于日志文件,它们可以工作,但是无论 basicConfig() 指定的日志类型如何,仍将显示重复消息。

有没有办法禁用 basicConfig() 的输出? 或者任何其他方式来实现这些选项?

谢谢。

您没有在问题中确切说明您想要的控制台和文件日志记录级别。 但是,您不需要调用basicConfig() ,因为它只是一个方便的函数。 您可以执行例如(刚刚输入的代码,未测试):

import logging

logger = logging.getLogger(__name__)
configured = False

def configure_logging():
    global configured
    if not configured:
        logger.setLevel(logging.DEBUG) # or whatever
        console = logging.StreamHandler()
        file = logging.FileHandler('/path/to/file')
        #set a level on the handlers if you want;
        #if you do, they will only output events that are >= that level
        logger.addHandler(console)
        logger.addHandler(file)
        configured = True

事件首先传递给记录器,如果要处理事件(由于比较记录器和事件的级别),则事件将传递给记录器的每个处理程序及其所有祖先的处理程序。 如果在处理程序上设置了级别,则该事件可能会被该处理程序丢弃,否则它将输出该事件。

找到下面的示例代码来处理各种异常的日志记录

import mysql.connector
import logging
logging.basicConfig(filename=r'C:\Users\root\Desktop\logs.txt',level=logging.DEBUG,format='%(asctime)s,%(levelname)s:%(message)s',datefmt='%d-%m-%Y %H:%M:%S')

while True:
    try:
        mydb=mysql.connector.connect(host='localhost',user='root',passwd='password123', database='shiva')

        mycursor=mydb.cursor()
        logging.info("Connected mysql db successfully...\n")
        mycursor.execute("show databases")
        mycursor.execute("Create table employee(name varchar(20), salary float(20))")
        mydb.commit()
    except Exception as e:
        logging.info("Trying to Connect MysqlDB...")
        logging.critical("Error Occured While Connecting...\n\n" "CAUSEDBY: "+str(e))
        logging.warning("Check Login Credentials.")
        

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM