第一种方法:
编程方法:
import logging
#记录器
logger = logging.getLogger('applog')
logger.setLevel('DEBUG')
#必须设置为两个handler中级别更低的
#处理器handler
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
#没有给handler指定日志级别,将使用logger的级别
fileHandler = logging.FileHandler(filename='addDemo.log')
fileHandler.setLevel(logging.INFO)
#
# #formatter格式
formatter = logging.Formatter('%(asctime)s - %(funcName)s - %(levelname)s - %(message)s')
#里面的8,10实现了占位对齐
#给处理器设置格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
#记录器要设置处理器
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)
#定义一个过滤器
flt = logging.Filter("cn.cccb")
#关联过滤器
# logger.addFilter(flt)
fileHandler.addFilter(flt)
#打印日志的代码
logger.debug("this is debug log")
logger.info("this is info log")
logger.warning("this is warning log")
logger.error("this is error log")
logger.critical("this is critical log")
第二种方法:
配置文件方法:
logging.conf
[loggers]
keys=root,applog
[handlers]
keys=fileHandler,consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_applog]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applog
propagate=0
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
args=('applog.log','midnight',3600,0)
level=DEBUG
formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s
datefmt=%Y-%m-%d %H:%M:%S
main
import logging.config
logging.config.fileConfig("logging.conf")
rootlogger = logging.getLogger()
rootlogger.debug('debug')
logger = logging.getLogger('applog')
logger.debug('debug2')
a = 'abc'
try:
int(a)
except Exception as e:
# logger.error(e)
logger.exception(e)
参考文件