本过程只做自己记录只用,不具体到每一步的过程,默认看客已经具备:google查找资料,eclipse添加组件,eclipse创建项目等基本技能。
工程中添加日志记录
logging.conf
# 定义logger模块,root是父类,必需存在的,其它的是自定义。
# logging.getLogger(NAME)便相当于向logging模块注册了一种日志打印
# name 中用 . 表示 log 的继承关系
[loggers]
keys=root,myLogger
# 定义handler
[handlers]
keys=infoHandler,errorHandler,stdoutHandler,debugHandler
# 定义格式化输出
[formatters]
keys=infoFmt,errorFmt,debugFmt
#--------------------------------------------------
# 实现上面定义的logger模块,必需是[logger_xxxx]这样的形式
#--------------------------------------------------
# [logger_xxxx] logger_模块名称
# level 级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
# handlers 处理类,可以有多个,用逗号分开
# qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
# propagate 是否继承父类的log信息,0:否 1:是
[logger_root]
level=DEBUG
handlers=errorHandler,infoHandler,debugHandler
[logger_myLogger]
handlers=errorHandler,infoHandler,debugHandler
propagate=0
level=DEBUG
qualname=myLogger
#--------------------------------------------------
# handler
#--------------------------------------------------
# [handler_xxxx]
# class handler类名
# level 日志级别
# formatter,上面定义的formatter
# args handler初始化函数参数
[handler_infoHandler]
class=logging.handlers.TimedRotatingFileHandler
level=INFO
formatter=infoFmt
args=('poseidon.log', )
[handler_debugHandler]
class=logging.handlers.TimedRotatingFileHandler
level=DEBUG
formatter=debugFmt
args=('poseidon_debug.log', )
[handler_errorHandler]
class=StreamHandler
level=ERROR
formatter=errorFmt
args=(sys.stderr,)
[handler_stdoutHandler]
class=StreamHandler
level=INFO
formatter=infoFmt
args=(sys.stdout,)
# When computing the next rollover time for the first time (when the handler is created),
# the last modification time of an existing log file, or else the current time,
# is used to compute when the next rotation will occur.
# 这个功能太鸡肋了,是从handler被创建的时间算起,不能按自然时间 rotation 切分,除非程序一直运行,否则这个功能会有问题
# 临时解决方案参考下面的链接:Python 多进程日志记录
# http://blogread.cn/it/article/4175?f=wb2
#args=(sys.stderr,)
#--------------------------------------------------
# 日志格式
#--------------------------------------------------
# %(asctime)s 年-月-日 时-分-秒,毫秒 2013-04-26 20:10:43,745
# %(filename)s 文件名,不含目录
# %(pathname)s 目录名,完整路径
# %(funcName)s 函数名
# %(levelname)s 级别名
# %(lineno)d 行号
# %(module)s 模块名
# %(message)s 消息体
# %(name)s 日志模块名
# %(process)d 进程id
# %(processName)s 进程名
# %(thread)d 线程id
# %(threadName)s 线程名
[formatter_infoFmt]
format=%(asctime)s %(levelname)s %(module)s %(funcName)s %(message)s
datefmt=
class=logging.Formatter
[formatter_debugFmt]
format=%(asctime)s %(levelname)s %(module)s %(funcName)s %(message)s
datefmt=
class=logging.Formatter
[formatter_errorFmt]
format=%(asctime)s %(levelname)s %(module)s %(funcName)s %(message)s
datefmt=
class=logging.Formatter
main.py中加载logging.conf配置
logConfFile = psettings.ROOT_DIR + os.sep + 'config' + os.sep + 'logging.conf'
# 初始化日志记录
logging.config.fileConfig(logConfFile, disable_existing_loggers=False)
logger = logging.getLogger('myLogger')
handler.py中可以获取
self.logger = logging.getLogger('myLogger.handler.BasicHandler')