import logging
# 记录器
logger = logging.getLogger("cn.ccd.applog") # 设置记录器名称
logger.setLevel(logging.DEBUG) # 设置记录器输出级别 hander设置了日志级别logger须设置为DEBUG 不然hander的最低输出级别为warning
# <Logger applog (DEBUG)>
# 类名 名字 输出级别
# print(logger)
# 处理器
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.WARNING)
# 没有设置日志级别默认使用记录器logger的日志级别
fileHandler = logging.FileHandler(filename="a.log")
consoleHandler.setLevel(logging.DEBUG)
# formatter格式
formatter = logging.Formatter('[%(asctime)s] [%(filename)s:%(lineno)d] [%(levelname)-8s] - %(message)s')
# 给处理器创建格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# 记录器设置处理器
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)
# 过滤器
flt = logging.Filter("cn.ccd") # 输出命名为cn.ccd开头的logger日志
# logger 添加过滤器
logger.addFilter(flt)
logger.debug("this is debug")
logger.info("this is info")
logger.warning("this is warning")
logger.error("this is error")
logger.critical("this is critical")
配置文件使用
-
创建配置文件logging.conf
[loggers] keys=root,ProxyIP [handlers] keys=fileHandler,consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=fileHandler [logger_ProxyIP] level=DEBUG handlers=consoleHandler qualname=ProxyIP propagate=0 [handler_consoleHandler] class=StreamHandler args=(sys.stdout,) level=DEBUG formatter=simpleFormatter [handler_fileHandler] class=handlers.TimedRotatingFileHandler args=('logging.log',"midnight", 1,0) level=ERROR formatter=simpleFormatter [formatter_simpleFormatter] format=[%(asctime)s] [%(filename)s:%(lineno)d] [%(levelname)-8s] - %(message)s datefmt=%Y-%m-%d %H:%M:%S
-
程序
# 配置文件方式
import logging
import logging.config
logging.config.fileConfig("logging.conf")
rootLogger = logging.getLogger()
ProxyIPLogger = logging.getLogger("ProxyIP")
rootLogger.debug("root debug")
ProxyIPLogger.debug("ProxyIP debug")
a = "abc"
try:
int(a)
except Exception as e:
ProxyIPLogger.error(e) # 只会将报错原因写入日志
ProxyIPLogger.exception(e) # 将具体报错位置写入日志