软编码
logging.basicConfig() 只读取一次配置
from logging.config import fileConfig
from app_manager.service.reuse import get_home import os if __name__ == '__main__': if os.path.exists(os.path.join(get_home(), 'logging.ini')): fileConfig(os.path.join(get_home(), 'logging.ini'))
[loggers] keys=root [handlers] keys=defaultHandler [formatters] keys=defaultFormatter [logger_root] level=ERROR handlers=defaultHandler qualname=root [handler_defaultHandler] class=FileHandler formatter=defaultFormatter args=('error.log', 'a') [formatter_defaultFormatter] format=%(asctime)s--文件:%(filename)s--方法:%(funcName)s--行号:%(lineno)s--%(message)s
硬编码
logger.py 文件
- #!/usr/bin/python
- # coding: utf-8
- import logging
- import logging.handlers
- from logging import *
- from datetime import *
- logger = logging.getLogger()
- logger.setLevel(logging.DEBUG)
- rht = logging.handlers.TimedRotatingFileHandler("reindex_out.log", 'D')
- fmt = logging.Formatter("%(asctime)s %(pathname)s %(filename)s %(funcName)s %(lineno)s \
- %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S")
- rht.setFormatter(fmt)
- logger.addHandler(rht)
- debug = logger.debug
- info = logger.info
- warning = logger.warn
- error = logger.error
- critical = logger.critical
测试脚本
- #!/usr/bin/env python
- # coding utf-8
- from logger import *
- import sys
- import os
- info("log from logger info")
- debug("this is from test.py")
- print 'current dir is ' + os.getcwd()
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
- %(levelno)s: 打印日志级别的数值
- %(levelname)s: 打印日志级别名称
- %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
- %(filename)s: 打印当前执行程序名
- %(funcName)s: 打印日志的当前函数
- %(lineno)d: 打印日志的当前行号
- %(asctime)s: 打印日志的时间
- %(thread)d: 打印线程ID
- %(threadName)s: 打印线程名称
- %(process)d: 打印进程ID
- %(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
可以给日志对象(Logger Instance)设置日志级别,低于该级别的日志消息将会被忽略,也可以给Hanlder设置日志级别,对于低于该级别的日志消息, Handler也会忽略。