1. 低配版

 # 指定显示信息格式
import logging
logging.basicConfig(
level=20, # 设置显示或写入的起始级别
format="%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s", # 这里的格式可以自己改
# datefmt="%a,%d %b %Y %H:%M:%S" # 显示时间格式,不写就用上一行的asctime
# filename="test.log", # 日志写入的文件名
filemode="w" ) logging.debug("debug message") # 调试模式 10
logging.info("info message") # 正常运转模式 20
logging.warning("warning message") # 警告模式 30
logging.error("error message") # 错误模式 40
logging.critical("critical message") # 致命的 崩溃模式 50

低配版不能同时屏幕输出和写入

下面来看标配版

标配版

步骤如下:

1. 产生logger对象

logger = logging.getLogger()

2. 产生其他对象(屏幕对象,文件对象等)

sh = logging.StreamHandler()   # 产生屏幕对象
fh1 = logging.FileHandler("staff.log", encoding="utf-8") # 产生文件对象,第一个参数为文件名
fh2 = logging.FileHandler("boss.log", encoding="utf-8") # 产生文件对象

3. 设置显示的格式

formater = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")  # 执行设置显示格式
formater1 = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 这里的name是业务名,默认为root
formater12 = logging.Formatter("%(asctime)s - %(message)s")

4. 给对象绑定格式

sh.setFormatter(formater)     # sh绑定formater
fh1.setFormatter(formater1) # fh1绑定formater1
fh2.setFormatter(formater2) # fh2绑定formater2

5. 给logger对象绑定其他对象

logger.addHandler(sh)
logger.addHandler(fh1)
logger.addHandler(fh2)

6. 设置显示级别

注意,其他对象的级别要高于logger的级别

logger.setLevel(10)
sh.setLevel(20) # 设置屏幕对象sh显示级别20及以上
fh1.setLevel(30)
fh2.setLevel(50)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

高配版

高配版才是工作中经常用到的,通过创建logging配置文件

logging配置文件

 import os
import logging.config # 定义三种日志输出格式
# 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 结束 # 设置log文件的目录和文件名
# 开始
log_file_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录
log_file_name = "test.log" # log文件名
# 结束 # 如果不存在定义的日志目录就创建一个
if not os.path.isdir(log_file_dir):
os.mkdir(log_file_dir) # log文件的全路径
log_file_path = os.path.join(log_file_dir, log_file_name) # log配置字典 LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
# 打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': log_file_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}

配置文件

 def load_my_logging_cfg():
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个实例
logger.info("It works!") # 记录该文件的运行状态 if __name__ == '__main__':
load_my_logging_cfg()

定义函数

# 好处:所有与logging配置相关的配置都写到字典中,更加清晰,方便管理

# 我们需要解决的问题
"""
1. 从字典加载配置 logging.config.dictConfig(settings.LOGGING_DIC)
2. logger对象都是配置到字典的logger键对应的子字典中,
而我们要获取不同的logger对象就是logger=logging.getLogger("loggers字字典的key名")
但问题是,我们想要不同的logger对象共用一段配置,那么肯定不能在logger字字典中定义n个key
我们的解决办法是定义一个空的key,再取logger对象时,logging.getLogger(__name__),
不同的文件的__name__不同,这保证了打印日志时标识信息不同,但是拿着改名字去loggers里找key时却找不到,
于是默认使用key=""的配置 """

好处及原因

以后要用到直接将配置文件拿来简单改下就可以了

python模块之logging模块的更多相关文章

  1. Python日志输出——logging模块

    Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...

  2. Python自建logging模块

    本章将介绍Python内建模块:日志模块,更多内容请从参考:Python学习指南 简单使用 最开始,我们用最短的代码体验一下logging的基本功能. import logging logger = ...

  3. Python实战之logging模块使用详解

    用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所 ...

  4. Python中的logging模块就这么用

    Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...

  5. python中日志logging模块的性能及多进程详解

    python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...

  6. 常用模块:os模块,logging模块等

    一    os模块 那么作为一个常用模块,os模块是与操作系统交互的一个模块. 那么os模块中我们常用的一般有以下几种: os.listdir('dirname') 以列表的形式列出指定目录下的所有文 ...

  7. os模块,sys模块,json和pickle模块,logging模块

    目录 OS模块 sys模块 json和pickle模块 序列化和反序列化 json模块 pickle logging模块 OS模块 能与操作系统交互,控制文件 / 文件夹 # 创建文件夹 import ...

  8. 模块讲解---os模块,sys模块,json和pickle模块,logging模块

    目录 模块的用法 os模块 常用的功能 sys模块 常用的功能 json和pickle模块 4. logging模块 模块的用法 通过 import 或者from......import...... ...

  9. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  10. python日志记录-logging模块

    1.logging模块日志级别 使用logging模块简单示例: >>>import logging >>>logging.debug("this's a ...

随机推荐

  1. 洛谷P3602 Koishi Loves Segments(贪心,multiset)

    洛谷题目传送门 贪心小水题. 把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍. 对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答 ...

  2. 自学Python4.2-装饰器

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  3. Android 可展开列表组件 ExpandableListView

    ExpandableListView 是ListView的子类,它把应用中的列表项分为几组,每组里可包含多个列表项. 所显示的列表项应该由ExpandableListAdapter 接口提供,实现Ex ...

  4. 「JLOI2015」骗我呢 解题报告?

    「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...

  5. centos7使用yum安装zabbix3.4

     应用环境: 关于ZABBIX: zabbix一开强大的开源监控工具,同类型还有nagios,ganglia,cacti等监控工具,通过过去一年Google趋势就知道zabbix全球的相对热度:   ...

  6. 使用Disruptor实现生产者和消费者模型

    生产者 package cn.lonecloud.procum.disruptor; import cn.lonecloud.procum.Data; import com.lmax.disrupto ...

  7. 牛客小白月赛12C (线性筛积性函数)

    链接:https://ac.nowcoder.com/acm/contest/392/C来源:牛客网 题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: ...

  8. Spring Boot + Mybatis + Redis二级缓存开发指南

    Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...

  9. 第三十二篇-NavigationView导航抽屉的使用

    效果图: 导航抽屉所用到的布局是DrawerLayout,可以在里面添加一个线性布局和TextView组件,TextView组件的文本信息就是"主页面".然后和线性布局平行添加一个 ...

  10. struts2 OGNL配和通用标签和其它标签的使用

    三.OGNL配合通用标签的其他使用 1.iterator标签(很重要) 动作类 package com.itheima.web.action; import java.util.ArrayList; ...