一、logging介绍
Logging是python自带的模块,这个模块支持输出不同级别的日志,可以
输出到控制台和写入文件,支持
TCP、
HTTP、GET/POST、SMTP、Socket等
协议,将日志信息发送到网络等等。
Logging提供5个等级的输出,
CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,
如果把looger的级别设置为INFO, 那么
小于
INFO级别的日志都不输出,
大于等于
INFO级
别的日志都输出
logging库提供了多个组件:
Logger、Handler、Filter、Formatter:
Logger 对象提供应用程序可直接使用的接口,
供应用代码使用;
Handler 发送日志到适当的目的地;
Filter 提供了过滤日志信息的方法,控制输出;
Formatter 指定日志输出和显示的具体格式。
二、Logging输出日志到控制台,同时写入文件
#coding:utf-8
# =======================================================================
# FuncName: console_out.py
# Desc: output log to console and file
# Date: 2016-02-19 17:32
# Author: johnny
# =======================================================================
import logging
def console_out(logFilename):
''' Output log to file and console '''
# Define a Handler and set a format which output to file
logging.basicConfig(
level = logging.DEBUG, # 定义输出到文件的log级别,
format = '%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定义输出log的格式
datefmt = '%Y-%m-%d %A %H:%M:%S', # 时间
filename = logFilename, # log文件名
filemode = 'w') # 写入模式“w”或“a”
# Define a Handler and set a format which output to console
console = logging.StreamHandler() # 定义console handler
console.setLevel(logging.INFO) # 定义该handler级别
formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s') #定义该handler格式
console.setFormatter(formatter)
# Create an instance
logging.getLogger().addHandler(console) # 实例化添加handler
# Print information # 输出日志级别
logging.debug('logger debug message')
logging.info('logger info message')
logging.warning('logger warning message')
logging.error('logger error message')
logging.critical('logger critical message')
if __name__ == "__main__":
console_out('logging.log')
2016-03-06 14:38:49,714 console_out.py : INFO logger info message
2016-03-06 14:38:49,714 console_out.py : WARNING logger warning message
2016-03-06 14:38:49,714 console_out.py : ERROR logger error message
2016-03-06 14:38:49,714 console_out.py : CRITICAL logger critical message
文件: logging.log
2016-03-06 Sunday 14:38:49 console_out.py : DEBUG logger debug message
2016-03-06 Sunday 14:38:49 console_out.py : INFO logger info message
2016-03-06 Sunday 14:38:49 console_out.py : WARNING logger warning message
2016-03-06 Sunday 14:38:49 console_out.py : ERROR logger error message
2016-03-06 Sunday 14:38:49 console_out.py : CRITICAL logger critical message
logging.basicConfig()函数中的具体参数
filename: 指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中;
filemode: 文件打开方式,在指定了filename时使用这个参数,默认值为“w”还可指定为“a”;
format: 指定handler使用的日志显示格式;
datefmt: 指定日期时间格式。,
格式参考strftime时间格式化(下文)
level: 设置rootlogger的日志级别
stream: 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
若同时列出了filename和stream两个参数,则stream参数会被忽略。
%(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
|
用户输出的消息
|
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
#!/usr/bin/env python
#coding:utf-8
import datetime,time
print time.strftime('%Y-%m-%d %H:%M:%S'),datetime.datetime.now().strftime('%f')[:3]
print datetime.datetime.now().strftime('%Y%m%d %H:%M:%S.%f')
1.logging介绍 Logging是python自带的模块,这个模块支持输出不同级别的日志,可以输出到控制台和写入文件,支持TCP、HTTP、GET/POST、SMTP、Socket等协议,将日志信息发送到网络等等。Logging提供5个等级的输出,CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,如果把
模块级函数
logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root loggerlogging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定root logger的日志级别logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中
示例:logging_level_example.py复制代码 代码如下:import loggingi
python中的很多模块是非常牛X的,之前提到过logging模块(其功能类似于java下的Log4j ),由于最近一个涉及网络排障的脚本需要日志输出,这里就使用了python的logging模块去实现。日志全部写到一个文件中时,随着时间的推移文件会越来越来,这里可以利用TimedRotatingFileHandler方法或RotatingFileHandler方法来进行处理。
在日志输出不涉及...
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s.%(msecs)03d-%(name)s-%(filename)s-[line:%(lineno)d]'
'-%(levelname)s-[日志信息]: ...
import sys
def init_logging(log_file, stdout=False):
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(module)s: %(message)s',
datefmt='%m/%d/%Y %H:%M:%S')
print('Ma.
formatter =
logging.Formatter("%(asctime)s %(levelname)s %(message)s","%Y%b%d-%H:%M:%S")
上面的%Y等是
时间格式,所以要想理解上面要表示个什么,先来看一下
Python的
时间格式。
需要查看代码性能,所以需要毫秒级别的打印。但是,在logging包中,查了源码之后确认使用的是time包的datefmt。而查看Python的doc文档,在time包中并没有提供毫秒的datefmt,所以,只能重写logging中取时间的函数。如下:
class Formatter(logging.Formatter):
def formatTime(self, record,
在记录一些必要信息时,我通常会使用
logging 模块,在
输出信息时同时可以
输出时间和
日志等级,例如使用 basicConfig 来先设定
日志格式:
logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s',
level=
logging.INFO,
import
logging
logging.basicConfig(level=
logging.INFO, format='%(asctime)s %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
logging.info('This is an info message.')
logging.warning('This is a warning message.')
logging.error('This is an error message.')
上述代码中,`basicConfig`函数用于配置
logging模块的基本信息,其中`level`参数指定了
日志输出的级别,`format`参数指定了
日志输出的格式,`datefmt`参数指定了日期
时间的格式。在代码中,我们使用了标准的
日志格式`'%(asctime)s %(levelname)s %(message)s'`,其中`asctime`表示
日志记录的
时间,`levelname`表示
日志的级别,`message`表示
日志的内容。最后,我们通过`
logging.info`、`
logging.warning`和`
logging.error`函数分别
输出了不同级别的
日志信息。