python模块之logging

输出到console(默认打印warning级别以上(warnging、error、critical)的日志):

import logging
logging.debug('hello world') logging.warning('hello world') logging.error('hello world') #WARNING:root:hello world #ERROR:root:hello world

输出到文件:

import logging
logging.basicConfig(filename='log_test.log',level=logging.INFO)
logging.debug('helloworld')
logging.info('helloworld')
logging.warning('helloworld')
#INFO:root:helloworld
#WARNING:root:helloworld

输出到文件,设定格式:

import logging
logging.basicConfig(filename='log_test.log',level=logging.INFO,format='%(asctime)s %(message)s',datefmt='%m-%d-%Y %I:%M:%S %p')
logging.debug('helloworld')
logging.info('helloworld')
logging.warning('helloworld')

#08-02-2020 05:56:53 AM helloworld
#08-02-2020 05:56:53 AM helloworld

输出到文件,所有格式:

import logging
logging.basicConfig(filename='log_test.log',level=logging.INFO,format='%(asctime)s %(message)s %(levelno)s %(levelname)s %(pathname)s %(filename)s %(module)s %(funcName)s %(lineno)d %(created)f %(relativeCreated)d %(asctime)s '
                                                                      '%(thread)d %(threadName)s %(process)d )',datefmt='%m-%d-%Y %I:%M:%S %p')

logging.debug('helloworld')
logging.info('helloworld')
logging.warning('helloworld')
def test_log():
    logging.warning('func test')
test_log()
#08-02-2020 06:20:59 AM helloworld 20 INFO E:/pythondir/Day01/testsdsd.py testsdsd.py testsdsd <module> 36 1596320459.622015 2 08-02-2020 06:20:59 AM 18572 MainThread 19432)
#08-02-2020 06:20:59 AM helloworld 30 WARNING E:/pythondir/Day01/testsdsd.py testsdsd.py testsdsd <module> 37 1596320459.622015 2 08-02-2020 06:20:59 AM 18572 MainThread 19432)
#08-02-2020 06:20:59 AM func test 30 WARNING E:/pythondir/Day01/testsdsd.py testsdsd.py testsdsd test_log 39 1596320459.622015 2 08-02-2020 06:20:59 AM 18572 MainThread 19432)

格式说明:

 同时输出日志到console以及文本:

import logging
#1.生成logger对象
logger = logging.getLogger('Mysql')
#全局日志级别,(总过滤)
logger.setLevel(logging.DEBUG)

#2.生成handler对象
ch = logging.StreamHandler()
#局部日志级别,(次级过滤)
ch.setLevel(logging.INFO)
fh = logging.FileHandler(filename='log_test_logging')
#局部日志级别,(次级过滤)
fh.setLevel(logging.WARNING)

#2.1把handler对象绑定到logger
logger.addHandler(ch)
logger.addHandler(fh)

#3.生成format对象,并设定日志格式
file_formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s ')
console_formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s ')

#3.1把formatter对象绑定handler对象
ch.setFormatter(console_formatter)
fh.setFormatter(file_formatter)
#日志输出
logger.warning('warning test')
logger.debug('debug test')

 对日志进行过滤以及切割:

import logging
from logging import handlers
#创建过滤对象类
class IgnoreBackupLogFilter(logging.Filter):
    def filter(self, record):
        return "you" not in record.getMessage()

# 1.先生成logger
logger = logging.getLogger('beifen')
# logger.setLevel(logging.WARNING)
logger.addFilter(IgnoreBackupLogFilter())
# 2.生成handler对象
ch = logging.StreamHandler()
#普通文件对象
# fh = logging.FileHandler(filename='beifen_test')
#切割文件对象
fh = handlers.RotatingFileHandler(filename='beifen_test',maxBytes=10,backupCount=3 )
# 2.1把handler对象绑定到logger
logger.addHandler(ch)
logger.addHandler(fh)

# 3.生成formatter
ch_formatter = logging.Formatter('%(asctime)s %(message)s')
fh_formatter = logging.Formatter('%(asctime)s %(message)s')
# 3.1 把formatter绑定到handler
ch.setFormatter(ch_formatter)
fh.setFormatter(fh_formatter)

# 输出
logger.warning('hello you')
logger.critical('hha')
原文地址:https://www.cnblogs.com/thanos-ryan/p/13417866.html