Python日志打印
1.常见用法
import logging
logging.warning('Warning Message')
2.日志输出等级
默认输出级别为Warning,只会输出级别高于30 的日志
Level | Numeric value |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
logging.debug('Debug Message')
logging.info('Info Message')
logging.warning('Warning Message')
logging.error('Error Message')
logging.critical('Critical Message')
#自定义输出级别
logging.log(60, 'My Log Message')
3.日志配置
-
使用硬编码配置
import logging logging.basicConfig( filename='app.log', #配置文件路径,输出日志保存到文件 level=logging.WARNING, #设置日志输出等级 format='[%(asctime)s]%(levelname)s:%(message)s') #自定义日志格式
-
通过配置文件配置
import logging import logging.config logging.config.fileConfig('logconfig.ini')
logconfig.ini
文件内容[loggers] keys=root [handlers] keys=defaultHandler [formatters] keys=defaultFormatter [logger_root] level=INFO handlers=defaultHandler qualname=root [handler_defaultHandler] class=FileHandler formatter=defaultFormatter args=('app.log', 'a') [formatter_defaultFormatter] format=%(levelname)s:%(name)s:%(message)s
4.高级用法
import logging
from logging import handlers
def main():
#初始化logger
logger = logging.getLogger()
#设置日志记录级别
logger.setLevel(logging.INFO)
#fmt设置日志输出格式,datefmt设置 asctime 的时间格式
formatter = logging.Formatter(fmt='[%(asctime)s]%(levelname)s:%(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')
#配置日志输出到控制台
console = logging.StreamHandler()
console.setLevel(logging.WARNING)
console.setFormatter(formatter)
logger.addHandler(console)
#配置日志输出到文件
file_logging = logging.FileHandler('app.log')
file_logging.setLevel(logging.WARNING)
file_logging.setFormatter(formatter)
logger.addHandler(file_logging)
#配置日志输出到文件,限制单个日志文件的最大体积
file_rotating_file = handlers.RotatingFileHandler('app_rotating.log', maxBytes=1024, backupCount=3)
file_rotating_file.setLevel(logging.WARNING)
file_rotating_file.setFormatter(formatter)
logger.addHandler(file_rotating_file)
#配置日志输出到文件,在固定的时间内记录日志文件
file_time_rotating = handlers.TimedRotatingFileHandler("app_time.log", when="s", interval=10, backupCount=5)
file_time_rotating.setLevel(logging.INFO)
file_time_rotating.setFormatter(formatter)
logger.addHandler(file_time_rotating)
#use
logger.debug('Debug Message')
logger.info('Info Message')
logger.warning('Warning Message')
logger.error('Error Message')
logger.critical('Critical Message')
logging.log(60, 'My Log Message')
if __name__ == '__main__':
main()