python里面用来打印日志的模块,就是logging模块,logging模块可以在控制台打印日志,也可以写入文件中。也可以两个操作都执行

1、控制台输入

import logging#导入模块
logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别,会把该级别及其以上级别的日志都打印出来
#比如如果定义level为debug,那么debug,info,warning,error级别的日志信息都会打印
# filename='my.log',#日志文件名,不写这个,直接打印控制台。加上就不会再控制台打印
# filemode='a',#a代表追加。w清空重写,
format=
'%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
#日志格式:时间 python文件 行 级别 日志信息
)
logging.debug('debug级别,最低级别,一般开发人员用来打印一些调试信息')
logging.info('info级别,正常输出信息,一般用来打印一些正常的操作')
logging.warning('waring级别,一般用来打印警信息')
logging.error('error级别,一般用来打印一些错误信息')

打印结果:

因为在配置日志信息时,定义level=logging.DEBUG,而debug级别是最低的,所以比他高的级别也都打印出来了。最终debug,info,warning,error级别的日志都打出来了

2、日志写入文件

只需要将控制台的代码中的filename和filemode注释掉就可

#http://www.nnzhp.cn/archives/436
import logging
# from logging import handlers
logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别,会把该级别及其以上级别的日志都打印出来
#比如如果定义level为debug,那么debug,info,warning,error级别的日志信息都会打印
filename='my.log',#日志文件名,不写这个,直接打印控制台。加上就不会再控制台打印
filemode='a',#a代表追加。w清空重写,
format=
'%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
#日志格式:时间 python文件 行 级别 日志信息
)
logging.debug('debug级别,最低级别,一般开发人员用来打印一些调试信息')
logging.info('info级别,正常输出信息,一般用来打印一些正常的操作')
logging.warning('waring级别,一般用来打印警信息')
logging.error('error级别,一般用来打印一些错误信息')

运行后可以看到,控制台已经不输出日志信息了,同时在本地目录下生成了一个my.log文件

我在两天分别执行了一次,所以会看到文件中一共有2段,因为文件是a模式,所以追加。选中的是第二次执行追加的日志

三、同时控制台输出,并写入文件

这时就需要用到处理器handles,可以指定日志输出到控制台,还是输出到文件。常见的有4中,这里介绍两种

StreamHandler 控制台输出

TimeRotatingFileHandler 按照时间自动分割日志文件

import logging
from logging import handlers#需要导入handlers
logger=logging.getLogger()#实例化一个logger对象
logger.setLevel(logging.DEBUG)#设置日志级别 cl=logging.StreamHandler()#负责在控制台输出
bl=handlers.TimedRotatingFileHandler(filename='a.log',when='S',interval=1,backupCount=5,encoding='utf-8')
#when =’S‘表示以秒为时间间隔,D:天 M:分钟 H :小时
#interval 时间间隔为1,单位是when的值,也就是1S备份一次
#backupcount 备份日志文件个数,超过后自动清除最早的 fmt=logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
#指定日志的格式
cl.setFormatter(fmt)#设置控制台输出的格式
bl.setFormatter(fmt)#设置文件日志的格式 logger.addHandler(cl)
logger.addHandler(bl)#把设置好的对象放入logger
logger.debug('我是debug...')
logger.warning('我是warning...') #结果:运行后,产生日志文件,同时1s后备份一个日志文件。
#再次运行2次,产生3个备份文件。
#运行第4次,第一个备份文件删除。

四、封装日志类

import logging
from logging import handlers
class MyLogger():
def __init__(self,file_name,level='info',backupCount=5,when='D'):
logger = logging.getLogger() # 实例化一个logger对象
logger.setLevel(self.get_level(level)) # 设置日志级别
cl = logging.StreamHandler() # 负责在控制台输出
bl = handlers.TimedRotatingFileHandler(filename=file_name, when=when, interval=1, backupCount=backupCount, encoding='utf-8')
fmt = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 指定日志的格式
cl.setFormatter(fmt) # 设置控制台输出的格式
bl.setFormatter(fmt) # 设置文件日志的格式
logger.addHandler(cl)
logger.addHandler(bl)
self.logger=logger
def get_level(self,str):
level={
'debug':logging.DEBUG,
'info':logging.INFO,
'warn':logging.WARNING,
'error':logging.ERROR
}
str=str.lower()#转换成小写
return level.get(str) log=MyLogger('aaa.log','debug')
log.logger.warning('warning日志信息。。。。')

五、nnlog

nnlog事对logging写日志操作进行了封装,使用起来更方便。该模块是第三方模块,需要先安装并导入

log = nnlog.Logger(file_name='my1.log', level='debug', when='D', backCount=5, interval=1)
# file_name是日志文件名
# level是日志级别,如果不传的话默认是debug级别
# when是日志文件多久生成一个,默认是按天,S 秒、M 分、 H 小时、 D 天、 W 每星期
# backCount是备份几个日志文件,默认保留5天的
# interval是间隔多久生成一个日志文件,默认是1天
log.debug('默认日志级别是debug')
log.info('info级别')
log.warning('waring级别')
log.error('error级别')

该模块实例化后,可同时在控制台和文件输出

python基础:日志模块logging,nnlog的更多相关文章

  1. python标准日志模块logging及日志系统设计

    最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下. python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发 ...

  2. python标准日志模块logging的使用方法

    参考地址 最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下.python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果 ...

  3. python的日志模块logging和syslog

    syslog模块是在unix环境下工作的模块,不能用于windows,在windows环境下可以使用logging模块. 一.syslog syslog模块可以用于记录系统运行的信息,这个模块提供的方 ...

  4. python标准日志模块logging使用

    python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: ...

  5. python日志模块logging

    python日志模块logging   1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...

  6. Python(2.7.6) 标准日志模块 - Logging Handler

    Python 标准日志模块使用 Handler 控制日志消息写到不同的目的地,如文件.流.邮件.socket 等.除了StreamHandler. FileHandler 和 NullHandler ...

  7. 日志模块logging使用心得

    在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...

  8. 加密模块hashlib+日志模块logging

    目录 1.hashlib 加密模块 1.hashlib模块基本使用 1.2 详细操作 ①md5加密模式 ②sha256复杂加密模式 ③加盐操作(普通加盐) ④加盐操作(动态加盐) 2.logging ...

  9. python基础——第三方模块

    python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的.  如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了.  如果你正在使用Window ...

随机推荐

  1. C++中inet_pton、inet_ntop函数

    - 头文件windows下:#include <WS2tcpip.h>linux下:#include <sys/socket.h>#include <netinet/in ...

  2. C#LeetCode刷题之#507-完美数(Perfect Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3879 访问. 对于一个 正整数,如果它和除了它自身以外的所有正因 ...

  3. Python多进程实现并行化随机森林

    文章目录 1. 前言 2. 随机森林原理 3.实现原理 3.1并行化训练 3.1.1训练函数 3.1.2 单进程训练函数 生成数据集模块--生成部分数据集 单进程训练函数代码 3.2 并行化预测 3. ...

  4. Lombok使用指南

    一.Lombok 简介 Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(POJO).在开发 ...

  5. Android 本地缓存Acache的简单使用

    设置缓存数据: ACache mCache = ACache.get(this); mCache.put("key1", "value"); //保存6秒,如果 ...

  6. Linux环境下安装MySQL数据库

    Linux安装mysql服务分两种安装方法: (1).源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: (2).使用官方编译好的二进制文件安装,优 ...

  7. 多线程std::cout 深入研究

    1.研究背景 在测试时发现mingw版本的gcc编译出来的程序,一个主程序新建20个线程,每个线程都循环向cout输出信息,几分钟程序就崩了,而用msvc和gcc-linaro版gcc交叉编译器编译出 ...

  8. 区块链入门到实战(19)之以太坊(Ethereum) – 以太币

    以太币的作用:防范以太坊网络被滥用和激励矿工. 与比特币网络有比特币类似,以太坊(Ethereum)也有自己的虚拟币 — 以太币. 以太币的主要作用有2个: 应用程序执行任何操作都需要支付以太币,防范 ...

  9. vps的搭建

    最近一直想自己搭建一款vps使用,但是苦于一直没有时间,直到今天得空,与大家一起分享下. 服务商的选择 因为自己之前在 vultr 上还留有余额(60$呢,好几百块大洋呢),所以我的服务商就选择 vu ...

  10. 机器学习 | 深入SVM原理及模型推导(一)

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第32篇文章,我们来聊聊SVM. SVM模型大家可能非常熟悉,可能都知道它是面试的常客,经常被问到.它最早诞生于上世纪六 ...