1.关键字:

  login 登录
  log 日志
  logging python日志模块

2.什么叫日志:

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

3.日志使用的地方:
  1.排错的时候需要打印很多细节来帮助排错
  2.有一些用户行为,有没有错都要记录下来(后台)
  3.严重的错误记录下来

4.logging模块的日志级别,总开关小于分开发以总开关为准,总开关大于分开关以分开关为准。

Selenium3+python自动化012+日志logging基本用法、高级用法_输出格式

 

两种书写格式:

格式一:

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_02

格式二:

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_03

 

 日志输出

Selenium3+python自动化012+日志logging基本用法、高级用法_输出格式_04

 

上面列表中的日志等级是从上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的;

 

问题:

问题1:为什么前面两条日志没有被打印出来?

  这是因为logging模块提供的日志记录函数所使用的日志器设置的日志级别是WARNING,因此只有WARNING级别的日志记录以及大于它的ERROR和CRITICAL级别的日志记录被输出了,而小于它的DEBUG和INFO级别的日志记录被丢弃了。

问题2:默认打印出来的日志信息中各字段表示什么意思?为什么会这样输出?

 上面输出结果中每行日志记录的各个字段含义分别是:日志级别:日志器名称:日志内容

问题3:怎么修改logging这些默认设置呢?

  其实很简单,在我们调用上面这些日志记录函数之前,手动调用一下basicConfig()方法,把我们想设置的内容以参数的形式传递进去就可以了。

 

5. logging.basicConfig()函数

该方法用于为logging日志系统做一些基本配置语法:logging.basicConfig(**kwargs)

Selenium3+python自动化012+日志logging基本用法、高级用法_排错_05

Selenium3+python自动化012+日志logging基本用法、高级用法_排错_06

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_07

实例2:

Selenium3+python自动化012+日志logging基本用法、高级用法_排错_08

 

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09第一个例子,默认级别为warning

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09第二个例子,设置日志级别

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09第三个例子,输出日志格式化

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09第四个例子,输出到文件

 

 有了filename参数就不会直接输出到控制台,而是写入文件,如下图

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_13

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09第五个例子,输出到文件(二)

 

 Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_15

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09第六个例子,写入到文件,同时将错误信息输出到控制台

 

 

 

 logging模块讲解

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09Selenium3+python自动化012+日志logging基本用法、高级用法_排错_18

1 import logging
2 import time
3 import os
4
5 class LoggingMethod():
6 # 创建方法
7 def getlogger(self):
8 logger = logging.getLogger()
9 logger.setLevel(logging.INFO)# Log等级总开关
10
11 now=time.strftime('%Y-%m-%d_%H_%M_%S')
12 filename=os.path.dirname(os.path.abspath('.')) + '\\log\\' + now + '.log'
13 # 创建一个handler,用于写入日志文件
14 fh = logging.FileHandler(filename)#mode='a'默认以追加的形式写入文件,如果想清空重写用“mode='w'”
15 fh.setLevel(logging.INFO) # 输出到file的log等级的开关
16
17 # 定义handler的输出格式
18 formatter = logging.Formatter("%(asctime)s - %(name)s-%(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
19
20 fh.setFormatter(formatter)
21 # 将FileHandler对象添加到handler里面
22 logger.addHandler(fh)
23
24 return logger
25
26 if __name__=='__main__':
27 logger=LoggingMethod().getlogger()
28
29 # 日志
30 logger.debug('debug message')
31 logger.info('info message')
32 logger.warning('warning message')
33 logger.error('error message')
34 logger.critical('critical message')

LoggingMethod

 设置log路径

 Selenium3+python自动化012+日志logging基本用法、高级用法_排错_19

 Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_20

 

Selenium3+python自动化012+日志logging基本用法、高级用法_日志记录_09Selenium3+python自动化012+日志logging基本用法、高级用法_排错_18

1 import logging
2 import time
3 import os
4
5 # 同一天的所有日志输入到同一个log文件
6 class LoggingMethod():
7 def getlogger(self):
8 # 设置存储日志的文件名
9 now = time.strftime('%Y-%m-%d')
10 filename = os.path.dirname(os.path.abspath('.')) + '\\log\\' + now + '.log'
11 err_filename=os.path.dirname(os.path.abspath('.')) + '\\log\\' + now+'-error' + '-' + '.log'
12 # 第一步,创建一个logger
13 logger = logging.getLogger()#实例化logger对象
14 logger.setLevel(logging.DEBUG) # Log等级总开关
15 # 第二步,创建一个handler,用于写入所有日志
16 fh1 = logging.FileHandler(filename,encoding='utf-8')
17 fh1.setLevel(logging.DEBUG) # 输出到file的log等级的开关
18 # 创建一个handler,用于写入错误日志
19 fh2 = logging.FileHandler(err_filename,encoding='utf-8')
20 fh2.setLevel(logging.WARNING) # 输出到file的log等级的开关
21 # 第三步,定义handler的输出格式
22 formatter = logging.Formatter('%(asctime)s - %(levelname)s -%(pathname)s-%(lineno)d'+'行'+'- %(message)s')
23 fh1.setFormatter(formatter)
24 fh2.setFormatter(formatter)
25 # 第四步,将handlers 添加到 logger
26 logger.addHandler(fh1)
27 logger.addHandler(fh2)
28
29 return logger
30 if __name__=='__main__':
31 logger = LoggingMethod().getlogger()
32 logger.info('测试info日志')
33 logger.error('error')

日志输入到文件和控制台