一:参考官方文档:
二:日志的级别:
日志记录级别的数值在下表中给出。如果你想要定义自己的级别,并且需要它们具有相对于预定义级别的特定值,那么这你可能对以下内容感兴趣。如果你定义具有相同数值的级别,它将覆盖预定义的值;预定义的名称将失效。
在工作中常用的日志级别:
三:基本使用
import logging
logging.debug("this is debug。。。")
logging.info('this is info ....')
logging.warning('this is warning....')
默认logging记录日志的级别为 warning级别。也就是说当级别为warning 或者比warning级别更高的时候,才会显示
四:配置日志级别
import logging
# 设置日志级别为 DEBUG
logging.basicConfig(level=logging.DEBUG)
logging.debug("this is debug。。。")
logging.info('this is info ....')
logging.warning('this is warning....')
默认日志打印在控制台,也可以将日志的保存到文件当中。
import logging
# 设置日志级别为 DEBUG ,文件名为my.log 文件模式为追加模式
logging.basicConfig(level=logging.DEBUG,filename='my.log',filemode='a',encoding='utf8')
logging.debug("this is debug。。。")
logging.info('this is info ....')
logging.warning('this is warning....')
如果配置到文件中,那么命令行就不再输出打印信息。
五:配置同时控制台和文件中打印
在项目中 应该是将日志同时输出到控制台以及在文件中打印。
配置日志格式
| 属性名称 | 格式 | 描述 |
|---|---|---|
| args | 此属性不需要用户进行格式化。 | 合并到 msg 以产生 message 的包含参数的元组,或是其中的值将被用于合并的字典(当只有一个参数且其类型为字典时)。 |
| asctime | %(asctime)s | 表示 LogRecord 何时被创建的供人查看时间值。 默认形式为 '2003-07-08 16:49:45,896' (逗号之后的数字为时间的毫秒部分)。 |
| created | %(created)f | LogRecord 被创建的时间(即 time.time() 的返回值)。 |
| exc_info | 此属性不需要用户进行格式化。 | 异常元组(例如 sys.exc_info)或者如未发生异常则为 None。 |
| 文件名 | %(filename)s | pathname 的文件名部分。 |
| funcName | %(funcName)s | 函数名包括调用日志记录. |
| levelname | %(levelname)s | 消息文本记录级别('DEBUG','INFO','WARNING','ERROR','CRITICAL')。 |
| levelno | %(levelno)s | 消息数字的记录级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL). |
| lineno | %(lineno)d | 发出日志记录调用所在的源行号(如果可用)。 |
| message | %(message)s | 记入日志的消息,即 msg % args 的结果。 这是在发起调用 Formatter.format() 时设置的。 |
| module -- 模块 | %(module)s | 模块 (filename 的名称部分)。 |
| msecs | %(msecs)d | LogRecord 被创建的时间的毫秒部分。 |
| msg | 此属性不需要用户进行格式化。 | 在原始日志记录调用中传入的格式字符串。 与 args 合并以产生 message,或是一个任意对象 (参见 使用任意对象作为消息)。 |
| 名称 | %(name)s | 用于记录调用的日志记录器名称。 |
| pathname | %(pathname)s | 发出日志记录调用的源文件的完整路径名(如果可用)。 |
| process | %(process)d | 进程ID(如果可用) |
| processName | %(processName)s | 进程名(如果可用) |
| relativeCreated | %(relativeCreated)d | 以毫秒数表示的 LogRecord 被创建的时间,即相对于 logging 模块被加载时间的差值。 |
| stack_info | 此属性不需要用户进行格式化。 | 当前线程中从堆栈底部起向上直到包括日志记录调用并引发创建当前记录堆栈帧创建的堆栈帧信息(如果可用)。 |
| thread | %(thread)d | 线程ID(如果可用) |
| threadName | %(threadName)s | 线程名(如果可用) |
通过使用文件处理器和控制台处理器进行操作。
import logging
# 设置名字
logger = logging.getLogger("某项目的日志")
# 设置级别
logger.setLevel(logging.DEBUG)
# 配置格式化样式 文本内容格式
formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s')
# 添加控制台处理器
ls = logging.StreamHandler()
ls.setLevel(logging.DEBUG)
# 设置格式
ls.setFormatter(formater)
# 控制台处理器添加到logger中
logger.addHandler(ls)
# 添加文件处理器
import os
import time
logsdir = os.path.join( os.path.dirname( os.path.dirname(__file__)),'logs')
# 日志目录定义
if not os.path.exists(logsdir):
os.mkdir(logsdir)
# 日志文件 以当时运行的日志格式
logfile = os.path.join(logsdir,time.strftime('%Y_%m_%d')+'.log')
lf = logging.FileHandler(filename=logfile,encoding='utf8')
lf.setLevel(logging.DEBUG)
lf.setFormatter(formater)
# 文件处理器添加到日志当中
logger.addHandler(lf)
logger.debug('this is debug')