import logging
#进行基本的日志配置

logging.basicConfig(filename = 'access.log',
format = '%(asctime)s - %(name)s - %(levelname)s -%(module)s %(message)s',
detefmt = '%Y - %m - %d %H:%M:%S %p'
level = 10,

日志级别遵循原则:自下而上进行匹配 #debug -》info ——》warning——》error-》critical
logging.debug("调试信息")#10
logging.info("正常信息")#20
logging.warning('不好啊着火啦') #30
logging.error('报错信息') #40
logging.critical('严重错误信息')#50

#问题:
1、没有指定日志级别
2、没有指定日志级别
3、只能往屏幕打印,没有写入文件

#新问题
1、不能指定字符串编码
2、只能往文件中打印

import logging
#logging 模块包含四种角色:logger,filter,formatter, handler
#1、logger:负责产生日志信息
logger1 = logging.getLogger('交易日志')
#logger2 = logging.getLogger('用户相关')

2、filter:负责筛选日志

3、formatter:控制日志输出格式

formatter1 = logging.Formatter(
fmt = '%(asctime):%(name)s:%(levelname)S:%(message)S',
datefmt = '%Y-%m-%d %X'
)

formatter2=logging.Formatter(
fmt = '%(asctime)s:%(message)s',
datefmt = '%Y-%m-%d %X'

#4、handler:负责日志输出的目标

h1 = logging.FileHandler(filename="al.log",encoding = 'utf-8')
h2 = logging.FileHandler(filename='a2.log',encoding = "utf-8")

sm = logging.StreamHandler()

5、绑定logger对象与handler对象
logger1.addHandler(h1)
logger1.addHandler(h2)
logger1.addHandler(sm)

6、绑定handler对象与formatter对象
h1、setFormatter(formatter)
h2、setFormatter(formatter)
sm.setFormatter(formatter2)

#7、设置日志级别:可以在两个关卡进行设置logger与handler
logger1.setLevel(10)
h1.setLevel(10)
h2.setLevel(10)
sm.setLevel(10)

logger1.info('Egon借给李杰100w')

python logger理解的更多相关文章

  1. python property理解

    一般情况下我这样使用property: @property def foo(self): return self._foo # 下面的两个decrator由@property创建 @foo.sette ...

  2. python 深入理解 赋值、引用、拷贝、作用域

    在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个 ...

  3. python 生成器理解

    通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...

  4. Python logger /logging

    # !/user/bin/python # -*- coding: utf-8 -*- ''' subprocess : 需要在linux平台上测试 shell logging ''' import ...

  5. 使用Python语言理解递归

    递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面 ...

  6. 110道python题+理解(不断更新)

    此篇题目在网上已经广为流传,但好多都不做解释,所以我想着自己一道一道的做一遍,并将相关涉及的做个补充,个人知识毕竟片面,有不足的地方还请大家多多指正 一.请用一行代码实现1-100之和 >> ...

  7. Python Logger使用

    1. 单文件的logging配置 import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filen ...

  8. Python logger模块

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  9. 用Python深入理解跳跃表原理及实现

    最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: ...

随机推荐

  1. C++类模板——博客链接

    https://www.jianshu.com/p/70ca94872418 C++类模板,你看我就够了 值得学习~

  2. golang之基本数据类型

    目录 一.golang之基本数据类型 1. 整型 (1)有符号(范围是负数.0和正数) (2)无符号(范围是0和正数) (3)特殊整型 (4)数字字面量语法 2. 浮点型 3. 复数类型 4. 布尔类 ...

  3. 一个原生ajax在jetbrains开发平台的调用方法

    这段随笔的记述目的无非是,一个html页面中可能有多段js代码,所以采用外引的方法应该会好一些 function checkfiles() { var xhr = new XMLHttpRequest ...

  4. CSS3 阴影与圆角边框

    ㈠css3的新特性实际应用 ⑴文本阴影效果,用代码编写的方式实现   ⑵鼠标悬停的动态效果 左侧三幅图片,上面初始状态是没有说明文本的,但把鼠标放在上面的时候,这个图片上面就出现了说明文字   ⑶分栏 ...

  5. vue实现v-model父子组件间的双向通信

    首先讲清楚有个缺点:父页面若同时使用多个子组件,永远只会只能实现第一个双向驱动,我是新手,还在研究.如果有高手请指教,感谢! 子组件 <script> export default { m ...

  6. cursor url 自定义鼠标样式

    cursor可以自定义鼠标,写法是cursor:url(“图片路径”),pointer; url:需使用的自定义光标的 URL.图片类型需要是.cur或.ani和jpg,png等格式的(.cur或.a ...

  7. 分布式-信息方式-ActiveMQ的Message dispatch高级特性之(指针) Message cursors

    Message dispatch高级特性之 Message cursors概述            ActiveMQ发送持久消息的典型处现方式是:当消息的消费者准备就绪时,消息发送系统把存储的 消息 ...

  8. Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT

    说明 前面从stackoverflow上找了一篇讲这两个选项的文章,文章内容很长,读到最后对Linux中的这两个选项还是有些迷茫,所以重新写一篇文章来做一个总结: 本文只总结TCP单播部分,并且只讨论 ...

  9. 第3周Java编程总结

    1.打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个“水仙花数”. 2. 编写Java程序,求13-23+33-43+…+973-983+ ...

  10. LeetCode 300. 最长上升子序列(Longest Increasing Subsequence)

    题目描述 给出一个无序的整形数组,找到最长上升子序列的长度. 例如, 给出 [10, 9, 2, 5, 3, 7, 101, 18], 最长的上升子序列是 [2, 3, 7, 101],因此它的长度是 ...