python logger理解
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理解的更多相关文章
- python property理解
一般情况下我这样使用property: @property def foo(self): return self._foo # 下面的两个decrator由@property创建 @foo.sette ...
- python 深入理解 赋值、引用、拷贝、作用域
在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个 ...
- python 生成器理解
通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...
- Python logger /logging
# !/user/bin/python # -*- coding: utf-8 -*- ''' subprocess : 需要在linux平台上测试 shell logging ''' import ...
- 使用Python语言理解递归
递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面 ...
- 110道python题+理解(不断更新)
此篇题目在网上已经广为流传,但好多都不做解释,所以我想着自己一道一道的做一遍,并将相关涉及的做个补充,个人知识毕竟片面,有不足的地方还请大家多多指正 一.请用一行代码实现1-100之和 >> ...
- Python Logger使用
1. 单文件的logging配置 import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filen ...
- Python logger模块
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- 用Python深入理解跳跃表原理及实现
最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: ...
随机推荐
- 【leetcode】1262. Greatest Sum Divisible by Three
题目如下: Given an array nums of integers, we need to find the maximum possible sum of elements of the a ...
- Python 异常处理Ⅲ
使用except而不带任何异常类型 你可以不带任何异常类型使用except,如下实例: 以上方式try-except语句捕获所有发生的异常.但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信 ...
- vue 绑定class、v-bind:style(对象语法、数组语法)
绑定 HTML Class 我们可以传给 v-bind:class 一个对象,以动态地切换 class: 内联样式在模板里 <div id="div1" :class=&qu ...
- border-box与content-box的区别
㈠box-sizing 属性 ⑴box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素. ⑵语法:box-sizing: content-box|border-box|inherit; ...
- ar9331修改flash大小和df、cat /proc/mtd的区别
首先感谢黄工的指导. 在openwrt固件目录下target/linux/ar71xx/image/Makefile,找到对应的机型,修改为4M,8M,16M,32M. 以oolite机型为例,如图所 ...
- Spring Boot教程(二十五)返回JSON格式
在上述例子中,通过@ControllerAdvice统一定义不同Exception映射到不同错误处理页面.而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这 ...
- JavaWeb_(Jar)使用fastjson解析json和序列化对象
菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...
- 客户端框架-MVP
MVP Model-View-Presenter MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当 ...
- 大哥带的XSS练习LEVE2
0X01输出在html标签中的XSS 这里相当于我们把XSS代码插入到了 html中的<td>标签中 其他好看的 但是不是同源访问 <script> var body= doc ...
- BootStrap之X-editable插件使用
项目背景 刚加入公司的新项目,主要在做开发工作.由于是新手,本周的工作是配合另外一个同事写前台页面.前台框架是Bootstrap,本文主要介绍一下项目需求的一个功能——表格行内编辑事件. 使用X-ed ...