链条传动

砥砺前行,不忘初心!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
日志级别:
DEBUG   打印出详细的日志信息,包括调试信息
INFO    记录普通日志信息,不包括调试信息
WARNING  警告信息:发生了预期之外的变故,但不影响程序的运行
ERROR   错误信息:产生了一些错误,可能会影响程序某些功能的运行
CRITICAL  严重错误:程序本身出错,可能会影响整个程序的运行

日志配置中,format常用信息:
%(name)s  Logger的名字
%(levelno)s  数字形式的日志级别
%(levelname)s  文本形式的日志级别
%(pathname)s  调用日志输出函数的模块的完整路径名,可能没有
%(filename)s  调用日志输出函数的模块的文件名
%(module)s  调用日志输出函数的模块名
%(funcName)s  调用日志输出函数的函数名
%(lineno)d  调用日志输出函数的语句所在的代码行
%(created)f  当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d  输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s  字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d  线程ID。可能没有
%(threadName)s  线程名。可能没有
%(process)d  进程ID。可能没有
%(message)s  用户输出的消息
'''

import logging
'''
#警告
#logging.warning('user [alex] attempt wrong password more than 3 times')
#严重
#logging.critical('server is down')


#要将日志写入日志文件,需要指定日志文件名和日志级别
logging.basicConfig(filename='test.log',  #日志配置:指定日志文件为test.log
                    level=logging.INFO,    #日志级别为INFO及其以上的日志写入日志文件
                    format='%(asctime)s %(message)s',  #对写入日志进行格式化
                    datefmt='%m%d%Y %I:%M:%S %p',)   #对日期输出进行格式化


logging.debug('this is debug')   #DEBUG级别比INFO低,不写入日志文件
logging.info('this is info')      #INFO及其以上的的级别可以写入日志文件
logging.warning('this is warning')
logging.error('this is error')
logging.critical('this is critical')
'''

'''
#同时把日志同时输出到日志文件和控制台
logging模块级函数
Logger:代码直接使用的:logging.debug、logging.info等都属于Logger
Handlers:发送日志到目的地(日志文件、控制台等)
Filter:日志过滤:不同日志输出到不同地方(日志文件、控制台)-----用的不多
Formatter:日志信息的格式化输出
'''

#Logger
logger = logging.getLogger('TEST-LOG')   #创建一个Logger对象(通过该对象操作Logger),参数是name(指定发送日志对象的名称,默认是root)
logger.setLevel(logging.DEBUG)   #设定一个全局的日志级别

#Formatter
formatter = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s")   #定义日志输出格式:时间-发送日志对象-日志级别-日志信息

#consle handler
ch = logging.StreamHandler()   #将日志信息输出到控制台
ch.setLevel(logging.DEBUG)   #设置日志输出级别(只针对输出到控制台的日志生效)
ch.setFormatter(formatter)    #设置日志输出格式(只针对输出到控制台的日志生效)

#logfile handler
fh = logging.FileHandler("access.log")    #将日志信息输出到日志文件,参数是指定的日志文件名
fh.setLevel(logging.WARNING)  #设置日志输出级别(只针对输出到日志文件的日志生效)
fh.setFormatter(formatter)    #设置日志输出格式(只针对输出到日志文件的日志生效)

#将自定义的Handlers告诉logger,由logger来执行
logger.addHandler(ch)
logger.addHandler(fh)


#日志流程:logger按照设定的日志级别获取日志----logger调用handler来处理日志----不同handler根据自己的设置(输出位置、日志级别)对logger的日志进行二次处理
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

 

posted on 2016-11-04 13:56  链条君  阅读(129)  评论(0编辑  收藏  举报