Python-logging日志

1.1 日志logging

日志是用来记录用户行为或者代码执行过程

1.1.1 五个级别

默认信息是输出info以上级别内容

  

 1 import logging
 2 
 3 logging.debug("debug message")          #排错信息
 4 
 5 logging.info("info message")            #正常信息
 6 
 7 logging.warning("warning message")      #警告信息
 8 
 9 logging.error("error message")          #错误信息
10 
11 logging.critical("critical message")    #严重错误信息
View Code

 

 

1.1.2 basicConfig简单的日志格式

  • 简单,能做事情相对较少
  • 不能解决中文的乱码问题
  • 不能同时往文件和屏幕上输出
 1 import logging  # 引入logging模块
 2 
 3 logging.basicConfig(level=logging.DEBUG,       #等级,logging.DEBUG显示DEBUG以上所有级别
 4 
 5                     format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
 6 
 7                     datefmt='%a ,%d %b %Y %H:%M:%S',
 8 
 9                     filename='test.log',
10 
11                     filemode='w')
12 
13 logging.debug("debug message")          #排错信息
14 
15 logging.info("info message")            #正常信息
16 
17 logging.warning("warning message")      #警告信息
18 
19 logging.error("error message")          #错误信息
20 
21 logging.critical("critical message")    #严重错误信息
View Code

 

 
1.1.2.1  basicConfig参数说明

filename

用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中

filemode

文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”

format

指定handler使用的日志显示格式

datefmt

指定日期时间格式

level

设置rootlogger的日志级别

stream

用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

 

1.1.2.2  Format参数可能用到的格式化串
%(name)s 

Logger的名字

%(created)f

前时间,用UNIX标准的表示时间的浮 点数表示

%(levelno)s

数字形式的日志级别

%(relativeCreated)d

输出日志信息时的,自Logger创建以 来的毫秒数

%(levelname)s

文本形式的日志级别

%(asctime)s

字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(pathname)s

调用日志输出函数的模块完整路径名,可能没有

%(thread)d

线程ID。可能没有
%(filename)s

调用日志输出函数的模块文件名

%(threadName)s

线程名。可能没有
%(module)s

调用日志输出函数的模块名

%(process)d

进程ID。可能没有
%(funcName)s

调用日志输出函数的函数名

%(message)s

用户输出的消息
%(lineno)d

调用日志输出函数的语句所在的代码行

 

1.1.2.3  应用
 1 import logging
 2 
 3 logging.basicConfig(level=logging.DEBUG,
 4 
 5                     format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
 6 
 7                     datefmt='%a ,%d %b %Y %H:%M:%S',
 8 
 9                     filemode='w')
10 
11 try:
12 
13     int(input('num>>'))
14 
15 except ValueError:
16 
17     logging.error("输出的值不是一个数字")
18 num>>a
19 
20 Mon ,06 May 2019 15:56:26 - auto.py[line:37] - ERROR: 输出的值不是一个数字
View Code

 

 

 

1.1.3 配置log对象

  • 些许复杂,能做的事情较多
  • 程序充分解耦
  • 程序变得高可定制
  • 控制台输出
1.1.3.1  例子
 1 import logging
 2 
 3 logger = logging.getLogger()   #创建一个对象
 4 
 5 sh = logging.StreamHandler()   # 创建一个handler,用于输出到控制台
 6 
 7 fh = logging.FileHandler('test2.log',encoding='utf-8')   # 创建一个handler,用于写入日志文件
 8 
 9 fomatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
10 
11 
12 
13 sh.setFormatter(fomatter)
14 
15 fh.setFormatter(fomatter)
16 
17 
18 
19 sh.setLevel(logging.WARNING)
20 
21 fh.setLevel(logging.INFO)
22 
23 
24 
25 logger.addHandler(sh)
26 
27 logger.addHandler(fh)   #logger对象可以添加多个fh和sh对象
28 
29 
30 
31 logger.setLevel(logging.DEBUG)
32 
33 
34 
35 logger.debug('你好')    # 调试模式
36 
37 logger.info('info message')      # 基础正常的信息
38 
39 logger.warning('warning message') # 警告信息
40 
41 logger.error('error message')    # 错误信息
42 
43 logger.critical('critical message') # 批判的 严重错误
44 2019-05-06 16:12:01,176 - root - WARNING - warning message
45 
46 2019-05-06 16:12:01,176 - root - ERROR - error message
47 
48 2019-05-06 16:12:01,176 - root - CRITICAL - critical message
49 
50 log文件输出
51 2019-05-06 16:12:01,176 - root - INFO - info message
52 2019-05-06 16:12:01,176 - root - WARNING - warning message
53 2019-05-06 16:12:01,176 - root - ERROR - error message
54 2019-05-06 16:12:01,176 - root - CRITICAL - critical message
View Code
 
 
 1 import logging
 2 
 3 logger = logging.getLogger()
 4 
 5 fh = logging.FileHandler('test.log',encoding='utf-8')
 6 
 7 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 8 
 9 #文件操作符 和 格式关联
10 
11 fh.setFormatter(formatter)
12 
13 #logger对象 和文件操作符 关联
14 
15 logger.addHandler(fh)
16 
17 logging.debug("debug message")          #排错信息
18 
19 logging.info("info message")            #正常信息
20 
21 logging.warning("警告 message")      #警告信息
22 
23 logging.error("error message")          #错误信息
24 
25 logging.critical("critical message")    #严重错误信息
26 log文件输出
27 2019-05-06 16:11:16,898 - root - WARNING - 警告 message
28 2019-05-06 16:11:16,898 - root - ERROR - error message
29 2019-05-06 16:11:16,898 - root - CRITICAL - critical message
View Code

 

 

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过fh.setLevel(logging.Debug)单对文件流设置某个级别。

转载于:https://www.cnblogs.com/sunrsy/p/10838419.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值