testlogging

上一篇 / 下一篇  2017-08-02 00:15:36 / 个人分类:python

# -*- encoding utf-8 -*-
importlogging

# Part-1
# 默认显示warning级别
# (日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET)
# logging.debug('this is debug')
# logging.info('this is info')
# logging.warning('this is waring')
# logging.error('this is error')
# logging.critical('this is critical')
# 输出:
# WARNING:root:this is waring
# ERROR:root:this is error
# CRITICAL:root:this is critical

# Part-2
# basicConfig进行log配置
# logging.basicConfig(
# level=logging.DEBUG,
# filename='testlog.log',
# filemode='w',
# format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
# datefmt='%a, %d %b %Y %H:%M:%S',
#
# )
# logging.debug('this is debug')
# logging.info('this is info')
# logging.warning('this is waring')
# logging.error('this is error')
# logging.critical('this is critical')

# 可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有
# filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
# filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
# format:指定handler使用的日志显示格式。
# datefmt:指定日期时间格式。
# level:设置rootlogger(后边会讲解具体概念)的日志级别
# stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
#
# 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用户输出的消息

# Part-3
# exp
# 创建一个logger
logger=logging.getLogger()

logger1=logging.getLogger('mylogger')
logger1.setLevel(logging.DEBUG)

logger2=logging.getLogger('mylogger')
logger2.setLevel(logging.INFO)

logger3=logging.getLogger('mylogger.child1')
logger3.setLevel(logging.WARNING)

logger4=logging.getLogger('mylogger.child1.child2')
logger4.setLevel(logging.DEBUG)

logger5=logging.getLogger('mylogger.child1.child2.child3')
logger5.setLevel(logging.DEBUG)

# 创建一个handler,用于写入日志文件
fh=logging.FileHandler('/tmp/test.log')

# 再创建一个handler,用于输出到控制台
ch=logging.StreamHandler()

# 定义handler的输出格式formatter
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

#定义一个filter
#filter = logging.Filter('mylogger.child1.child2')
#fh.addFilter(filter)

# 给logger添加handler
#logger.addFilter(filter)
logger.addHandler(fh)
logger.addHandler(ch)

#logger1.addFilter(filter)
logger1.addHandler(fh)
logger1.addHandler(ch)

logger2.addHandler(fh)
logger2.addHandler(ch)

#logger3.addFilter(filter)
logger3.addHandler(fh)
logger3.addHandler(ch)

#logger4.addFilter(filter)
logger4.addHandler(fh)
logger4.addHandler(ch)

logger5.addHandler(fh)
logger5.addHandler(ch)

# 记录一条日志
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')

logger1.debug('logger1 debug message')
logger1.info('logger1 info message')
logger1.warning('logger1 warning message')
logger1.error('logger1 error message')
logger1.critical('logger1 critical message')

logger2.debug('logger2 debug message')
logger2.info('logger2 info message')
logger2.warning('logger2 warning message')
logger2.error('logger2 error message')
logger2.critical('logger2 critical message')

logger3.debug('logger3 debug message')
logger3.info('logger3 info message')
logger3.warning('logger3 warning message')
logger3.error('logger3 error message')
logger3.critical('logger3 critical message')

logger4.debug('logger4 debug message')
logger4.info('logger4 info message')
logger4.warning('logger4 warning message')
logger4.error('logger4 error message')
logger4.critical('logger4 critical message')

logger5.debug('logger5 debug message')
logger5.info('logger5 info message')
logger5.warning('logger5 warning message')
logger5.error('logger5 error message')
logger5.critical('logger5 critical message')

# 有多中可用的Handler:
# logging.StreamHandler 可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息
# logging.FileHandler 用于向一个文件输出日志信息
# logging.handlers.RotatingFileHandler 类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出
# logging.handlers.TimedRotatingFileHandler 和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就自动创建新的日志文件
# logging.handlers.SocketHandler 使用TCP协议,将日志信息发送到网络。
# logging.handlers.DatagramHandler 使用UDP协议,将日志信息发送到网络。
# logging.handlers.SysLogHandler 日志输出到syslog
# logging.handlers.NTEventLogHandler 远程输出日志到Windows NT/2000/XP的事件日志
# logging.handlers.SMTPHandler 远程输出日志到邮件地址
# logging.handlers.MemoryHandler 日志输出到内存中的制定buffer
# logging.handlers.HTTPHandler 通过"GET"或"POST"远程输出到HTTP服务器
# 各个Handler的具体用法可查看参考书册:
# https://docs.python.org/2/library/logging.handlers.html#module-logging.handlers

# Part-4
importlogging
importlogging.config

logging.config.fileConfig("logging.conf")# 采用配置文件

# create logger
logger=logging.getLogger("simpleExample")

# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar