day17 logging 日志模块

一、基本用法

logging模块的四个对象:

logger :产生日志对象

Filter :过滤日志对象(不常用)

Handler :接收日志,控制打印到不同的路径(Filehandler打印到文件中,StreamHandler打印到控制台)

Formatter :定制不同的日志格式对象,绑定给不同的Handler对象使用

 1 import logging
 2 import sys
 3
 4 #获取logger实例,参数为空时返回root logger
 5 logger=logging.getLogger("日志名")
 6
 7 #指定logger输出格式
 8 formatter=logging.Formatter(%(asctime)s-%(levelname)s-%(message)s)
 9 #asctime: 时间
10 #levelname:等级名称
11 #message:需要提示的信息
12
13 #文件输出日志
14 file_handler=logging.FileHandler("test.log")
15 file_handler.setFormatter(formatter)   # 通过setFormatter指定日志输出格式
16
17 #控制台输出日志
18 console_handler=logging.StreamHandler(sys.stdout)
19 console_handler.formatter=formatter #也可直接为formatter赋值
20
21 #为logger添加日志处理器
22 logger.addHandler(file_handler)
23 logger.addHandler(console_handler)
24
25 #指定最低输出级别,正常情况下默认为warn级别
26 logger.setLevel(logging.INFO)
27
28 #如需输出不同程度级别的log,可以自由选择
29 logger.debug("DEBUG")  #调试
30 logger.info("INFO")   #信息
31 logger.warn("WARN")   #警告
32 logger.error("ERROR") #报错
33 logger.fatal("FATAL")   # 与critical一样
34 logger.critical("CRITICAL")   #崩溃
35
36
37
38 #移除一些日志处理器
39 logger.removed(file_handler)

二、应用?????

 1 "logging配置"
 2 import os
 3 import loggint.config
 4
 5 #定义日志的三种输出格式(非固定形式,可根据需要选择)
 6 standard_format = ‘[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]‘  7                   ‘[%(levelname)s][%(message)s]‘ #其中name为getlogger指定的名字
 8
 9 simple_format = ‘[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s‘
10
11 id_simple_format = ‘[%(levelname)s][%(asctime)s] %(message)s‘
12
13 logfile_dir=os.path.dirname(os.path.abspath(__file__))  #log日志的文件目录
14 logfile_name="log"  #日志的文件名
15
16 #如果不存在定义的日志目录就创建一个
17 if not os.path.isdir(logfile_dir):
18     os.mkdir(logfile_dir)
19
20 #log文件的全路径
21 logfile_path=os.path.join(logfile_dir,logfile_name)
22
23 #配置字典
24 LOGGING_DIC = {
25     ‘version‘: 1,
26     ‘disable_existing_loggers‘: False,
27     ‘formatters‘: {
28         ‘standard‘: {
29             ‘format‘: standard_format
30         },
31         ‘simple‘: {
32             ‘format‘: simple_format
33         },
34     },
35     ‘filters‘: {},
36     ‘handlers‘: {
37         #打印到终端的日志
38         ‘console‘: {
39             ‘level‘: ‘DEBUG‘,
40             ‘class‘: ‘logging.StreamHandler‘,  # 打印到屏幕
41             ‘formatter‘: ‘simple‘
42         },
43         #打印到文件的日志,收集info及以上的日志
44         ‘default‘: {
45             ‘level‘: ‘DEBUG‘,
46             ‘class‘: ‘logging.handlers.RotatingFileHandler‘,  # 保存到文件
47             ‘formatter‘: ‘standard‘,
48             ‘filename‘: logfile_path,  # 日志文件
49             ‘maxBytes‘: 1024*1024*5,  # 日志大小 5M
50             ‘backupCount‘: 5,
51             ‘encoding‘: ‘utf-8‘,  # 日志文件的编码,再也不用担心中文log乱码了
52         },
53     },
54     ‘loggers‘: {
55         #logging.getLogger(__name__)拿到的logger配置
56         ‘‘: {
57             ‘handlers‘: [‘default‘, ‘console‘],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
58             ‘level‘: ‘DEBUG‘,
59             ‘propagate‘: True,  # 向上(更高level的logger)传递
60         },
61     },
62 }
63
64
65 def load_my_logging_config():
66     logging.config.dictConfig(LOGGING_DIC)   #导入上面个定义的logging配置
67     logger=logging.getLogger(__name__)  #生成一个log实例
68     logger.info("Best wishes to you!!")
69
70 if __name__=="main":
71     load_my_logging_config()
72 logging 配置文件

?从字典中加载配置:logging.config.dictConfig(settings.LOGGING_DIC)

?logger对象都是配置到字典的 logges 键对应的子字典中的,

于是我们如需获取不同的logger对象就是

logger=logging.getLogger("loggers子字典的 key 名")

?Question: 问题是 logger 名的 logger 对象都公用一段配置,需定义多个key,这是不现实的

??  解决方式:定义一个空的 key

‘loggers‘: {
‘‘: {
‘handlers‘: [‘default‘, ‘console‘],
‘level‘: ‘DEBUG‘,
‘propagate‘: True,
},
}

当我们再次去取 logger 对象时:

logging.getLogger(__name__),不同的文件__name__不同,这保证了打印日志时标识信息不同,

但是当拿着该名字取 loggers 里找 key 名时却发现找不到,于是默认使用 key=" " 的配置

原文地址:https://www.cnblogs.com/Smart1san/p/9206815.html

时间: 2024-10-18 21:57:49

day17 logging 日志模块的相关文章

python 自动化之路 logging日志模块

logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511919766/article/details/25136485 清晰明了,入门必备http://my.oschina.net/leejun2005/blog/126713 继承讲的很棒http://my.oschina.net/u/126495/blog/464892 实例分析 一:概述 在实际项目

Python入门之logging日志模块以及多进程日志

本篇文章主要对 python logging 的介绍加深理解.更主要是 讨论在多进程环境下如何使用logging 来输出日志, 如何安全地切分日志文件. 1. logging日志模块介绍 python的logging模块提供了灵活的标准模块,使得任何Python程序都可以使用这个第三方模块来实现日志记录.python logging 官方文档 logging框架中主要由四个部分组成: Loggers: 可供程序直接调用的接口 Handlers: 决定将日志记录分配至正确的目的地 Filters:

python 全栈 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)

一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据流中接收) 1.函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error mes

python的logging日志模块(二)

晚上比较懒,直接搬砖了. 1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印:WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING: 日志级别大小关系为:

python的logging日志模块(一)

最近修改了项目里的logging相关功能,用到了Python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 下面的代码展示了logging最基本的用法. # -*- coding: utf-8 -*- import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = logging.getLogger("AppName")

phthon 基础 7.3 logging 日志模块

一. logging 的使用 日志是我们排查问题的关键利器,写好日志记录,当我们发生问题时,可以快速定位代码范围进行修改.python有给我们开发者提供好的日志模块,下面我们就来介绍一下logging模块: import logging #从上往下,日志级别逐渐升高 logging.debug('this is debug message') logging.info('this is info message') logging.warning('this is warning message

logging日志模块

一.logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息: print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据:logging则可以由开发者决定将信息输出到什么地方,以及怎么输出 二.logging模块使用 2.1 基本使用 配置logging的基本配置

python-25 logging日志模块之二

1. logging日志框架 主要包括四部分: Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志 Handlers: 决定将日志记录分配至正确的目的地 Filters:对日志信息进行过滤, 提供更细粒度的日志是否输出的判断 Formatters: 制定最终记录打印的格式布局 1)loggers loggers 就是程序可以直接调用的一个日志接口,可以直接向logger写入日志信息.logger并不是直接实例化使用的,而是通过logging.getLogger(nam

Python之logging日志模块

logging 用于便捷既然日志切线程安全的模块 vim log_test.py import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=logging.DEBUG) logging.debug('debug') logg