# __________________________________________________
# 创建一个logger
logger = logging.getLogger() logger1 = logging.getLogger('mylogger')
logger1.setLevel(logging.DEBUG) logger2 = logging.getLogger('mylogger')
logger2.setLevel(logging.INFO) logger3 = logging.getLogger('mylogger.child1')
logger3.setLevel(logging.WARNING) logger4 = logging.getLogger('mylogger.child1.child2')
logger4.setLevel(logging.ERROR) # root.mylogger.child1.child2.child3
logger5 = logging.getLogger('mylogger.child1.child2.child3')
logger5.setLevel(logging.ERROR) # 创建一个输出文件的handler
fh = logging.FileHandler("./tmp/test.log") # 创建一个输出控制台的handler
ch = logging.StreamHandler() formatter = logging.Formatter("%(asctime)s-%(lineno)s-%(message)s-%(name)s-%(levelname)s") # handler设置formtter
fh.setFormatter(formatter)
ch.setFormatter(formatter) # 定义一个filter
filter = logging.Filter("mylogger.child1.child2") # 给handler添加filter
# fh.addFilter(filter)
# ch.addFilter(filter) # 给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch) # 给logger1添加handler
logger1.addHandler(fh)
logger1.addHandler(ch) # 给logger2添加handler
logger2.addHandler(fh)
logger2.addHandler(ch) # 给logger3添加handler
logger3.addHandler(fh)
logger3.addHandler(ch) # 给logger4添加handler
logger4.addHandler(fh)
logger4.addHandler(ch) # 给logger5添加handler
logger5.addHandler(fh)
logger5.addHandler(ch) # 记录一条日志
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message') logger1.debug('logger1 debug message')
logger1.info('logger1 info message')
logger1.warning('logger1 warning message')
logger1.error('logger1 error message')
logger1.critical('logger1 critical message') logger2.debug('logger2 debug message')
logger2.info('logger2 info message')
logger2.warning('logger2 warning message')
logger2.error('logger2 error message')
logger2.critical('logger2 critical message') logger3.debug('logger3 debug message')
logger3.info('logger3 info message')
logger3.warning('logger3 warning message')
logger3.error('logger3 error message')
logger3.critical('logger3 critical message') logger4.debug('logger4 debug message')
logger4.info('logger4 info message')
logger4.warning('logger4 warning message')
logger4.error('logger4 error message')
logger4.critical('logger4 critical message') logger5.debug('logger5 debug message')
logger5.info('logger5 info message')
logger5.warning('logger5 warning message')
logger5.error('logger5 error message')
logger5.critical('logger5 critical message')
filter: 
限制只有满足过滤规则的日志才会输出。
     比如我们定义了filter = logging.Filter('a.b.c'),并将这个Filter添加到了一个Handler上,则使用该Handler的Logger中只有名字带          a.b.c前缀的Logger才能输出其日志。
import logging

logger = logging.getLogger()
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log') # 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter)
ch.setFormatter(formatter) # 定义一个filter
filter = logging.Filter('mylogger')
fh.addFilter(filter)
ch.addFilter(filter) # logger.addFilter(filter)
logger.addHandler(fh)
logger.addHandler(ch) logger.setLevel(logging.DEBUG) logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message') ##################################################
logger1 = logging.getLogger('mylogger')
logger1.setLevel(logging.DEBUG) logger2 = logging.getLogger('mylogger')
logger2.setLevel(logging.INFO) logger1.addHandler(fh)
logger1.addHandler(ch) logger2.addHandler(fh)
logger2.addHandler(ch) logger1.debug('logger1 debug message')
logger1.info('logger1 info message')
logger1.warning('logger1 warning message')
logger1.error('logger1 error message')
logger1.critical('logger1 critical message') logger2.debug('logger2 debug message')
logger2.info('logger2 info message')
logger2.warning('logger2 warning message')
logger2.error('logger2 error message')
logger2.critical('logger2 critical message')
 # 日志
import logging
# __________________________#basicConfig 设置日志的配置
logging.basicConfig(
level=logging.DEBUG, # 打印级别
# filename="logger.log", # 打印哪个目录
filemode="w", # 覆盖
format="%(name)s-%(asctime)s-[%(lineno)d]-%(message)s-%(filename)s", # 输出的日志信息
stream=open("logger.log", "w")
) logging.debug("debug messages")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message") # _________________________#logger # 将日志封装
def logger():
logger = logging.getLogger() fh = logging.FileHandler("test_log") # 文件里面发送内容 文件处理器
ch = logging.StreamHandler() # 文件控制台发送内容 控制台处理器 fm = logging.Formatter("%(asctime)s-%(message)s") # 格式 fh.setFormatter(fm) # 输出设置格式
ch.setFormatter(fm) logger.addHandler(fh) # 添加handler
logger.addHandler(ch)
logger.setLevel("DEBUG") # 设置级别
return logger # # _______________________#
#
#
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
# # _________________________# import logging
logger = logging.getLogger() # 获取日志对象
# logger.setLevel(logging.INFO) # 同一个logger名字,创建的是同一个对象
logger1 = logging.getLogger("mylogger") # 日志名称
logger1.setLevel(logging.DEBUG) logger2 = logging.getLogger("mylogger.sontree")
logger2.setLevel(logging.INFO) fh = logging.FileHandler("test_log_new") # 文件里面发送内容
ch = logging.StreamHandler() # 文件控制台发送内容 fm = logging.Formatter("%(message)s-%(asctime)s") fh.setFormatter(fm)
ch.setFormatter(fm) # logger.addHandler(fh)
# logger.addHandler(ch) logger1.addHandler(fh)
logger1.addHandler(ch) logger2.addHandler(fh)
logger2.addHandler(ch) # logger.debug("logger debug")
# logger.info("logge info")
# logger.warning("logger warning")
# logger.error("logger error")
# logger.critical("logger critical") logger1.debug("logger1 debug")
logger1.info("logger1 info")
logger1.warning("logger1 warning")
logger1.error("logger1 error")
logger1.critical("logger1 critical") # logger2.debug("logger2 debug")
# logger2.info("logger2 info")
# logger2.warning("logger2 warning")
# logger2.error("logger2 error")
# logger2.critical("logger2 critical")

https://www.cnblogs.com/yuanchenqi/articles/5732581.html  各种包文章

https://www.cnblogs.com/wupeiqi/articles/5501365.html  这个里面的logging更详细

format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

20.logging模块的更多相关文章

  1. Python logging模块简介

    logging模块提供logger,handler,filter,formatter. logger:提供日志接口,供应用代码使用.logger最长用的操作有两类:配置和发送日志消息.可以通过logg ...

  2. 20 python 初学(logging模块)

    学习网站:https://www.cnblogs.com/yuanchenqi/articles/5732581.html logging 模块: # _author: lily # _date: 2 ...

  3. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  4. Python之logging模块

    一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...

  5. Python中的logging模块

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

  6. 【python,logging】python中的logging模块

    本文章转自kenby的博客,比较全面易懂,转来留作以后使用. http://kenby.iteye.com/blog/1162698 一.从一个使用场景开始 import logging # 创建一个 ...

  7. Python Logging 模块研究

    背景在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:l... 背景 在一个新的项目里面加入了日志功能,想自己 ...

  8. python日志记录-logging模块

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

  9. Python学习笔记——基础篇【第六周】——logging模块

    常用模块之logging 用于便捷记录日志且线程安全的模块 import logging logging.basicConfig(filename='log.log', format='%(ascti ...

随机推荐

  1. PHP Excel导入

    public function importFile() { $file = request()->file('file'); $params = $this->request->p ...

  2. ASP.NET MVC Model 验证总结

    http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...

  3. 天勤考研数据结构笔记—栈的C语言实现

    栈的基本概念 栈的定义:栈是一种只能在一端进行插入或删除操作的线性表.其中允许进行插入或删除的一端称为栈顶(top).栈顶是由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是数组索引, ...

  4. [c++] 幂法求特征向量

    幂法的原理可参考此篇论文:http://d.wanfangdata.com.cn/Periodical/hnnydxxb2001Z1023 本文求解的是 3 阶矩阵最大特征值及其特征向量 下面是其 C ...

  5. [python] a little deep learning case

    from numpy import exp, array, random, dot class NeuralNetwork(): def __init__(self): random.seed(1) ...

  6. luoguP3390(矩阵快速幂模板题)

    链接:https://www.luogu.org/problemnew/show/P3390 题意:矩阵快速幂模板题,思路和快速幂一致,只需提供矩阵的乘法即可. AC代码: #include<c ...

  7. Fiddler-打断点(bpu)

    一.断点 1.为什么要打断点? 比如一个购买的金额输入框,输入框前端做了限制大于100,那么我们测试的时候,需要测试小于100的情况下.很显然前端只能输入大于100的.这时我们可以先抓到接口,修改请求 ...

  8. EXKMP模版

    这道题目折腾了我好一会啊,出于尊重我要先放我们师兄的博客 1178: [视频]EXKMP模版:最长共同前缀长度 时间限制: 1 Sec  内存限制: 128 MB提交: 180  解决: 123[提交 ...

  9. Codeforces 1190D. Tokitsukaze and Strange Rectangle

    传送门 注意到矩形往上是无限的,考虑把点按 $y$ 从大到小考虑 对于枚举到高度为 $h$ 的点,设当前高度大于等于 $h$ 的点的所有点的不同的 $x$ 坐标数量为 $cnt$ 那么对于这一层高度 ...

  10. java保留小数点的几个方法

    方法一: String类自带的方法 String.format("%.2f", 1.2548); "%.2f"其中的数字决定保留几位方法二: 格式化的方法 pr ...