logging模块简介

logging模块是python内置的标准模块,主要用于输出程序的运行日志。
可以设置输出日志的等级,日志保存路径,日志文件回滚等等。

logging模块的基本使用

import logging

logging.basicConfig(
level=logging.INFO, # 指定日志的等级为INFO
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" # 输出的日志格式
)
"""
日志等级如下:
DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态
INFO:处理请求或者状态变化等日常事务
WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误
ERROR:发生错误时,如IO操作失败或者连接问题
CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用
FATAL:致命错误
""" """
日志格式如下:
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息
datefmt:指定时间格式,同time.strftime();
level:设置日志级别,默认为logging.WARNNING;
stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
""" # 创建一个日志打印器
logger = logging.getLogger(name="satori") # 如果name不指定,那么默认为"root" # 下面就可以打印了
logger.debug("i am a debug")
logger.info("i am a info")
logger.warning("i am a warning")
logger.error("i am a error")
logger.critical("i am a critical")
logger.fatal("i am a fatal")
"""
2019-06-27 17:08:55,206 - satori - INFO - i am a info
2019-06-27 17:08:55,206 - satori - WARNING - i am a warning
2019-06-27 17:08:55,206 - satori - ERROR - i am a error
2019-06-27 17:08:55,206 - satori - CRITICAL - i am a critical
2019-06-27 17:08:55,206 - satori - CRITICAL - i am a fatal
""" # 但是我们发现debug貌似没有打印,这是因为我们将日志等级设置成了INFO
# 那么等级比它弱的将不会输出,如果我们将日志等级设置为ERROR,那么同理debug、info、warning将不会起作用

将日志写入文件

import logging

# 我们设置日志等级和输出格式其实有两种,刚才的是一种,下面介绍第二种。
logger = logging.getLogger("satori") # 可以通过logger设置日志等级
logger.setLevel(level=logging.ERROR) # 创建FileHandler,类似于open
file_handler = logging.FileHandler("1.txt", mode="a", encoding="utf-8") # 创建输出的格式
format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 将格式设置到handler里面去
file_handler.setFormatter(format) # 再将handler添加到logger里面去,那么此时logger在输出的时候便可以输出到文件里面去
logger.addHandler(file_handler) logger.warning("i am a warning")
logger.fatal("yabai,fatal occurred")

此时1.txt文件内容如下

2019-06-27 17:19:46,525 - satori - CRITICAL - yabai,fatal occurred

而且此时并没有输出到控制台,但如果我同时也想输出到控制台呢?并且我想为输出到文件和输出到控制台设置不同的等级,文件我想记录的简单一点,但是控制台我想看的详细一点,怎么办呢?


将日志同时写到文件和控制台

import logging

logger = logging.getLogger("satori")

# 这里就不要再使用logger设置日志等级了
# logger.setLevel(level=logging.ERROR) # 创建FileHandler实例,类似于open
file_handler = logging.FileHandler("2.txt", mode="a", encoding="utf-8") # 使用FileHandler设置日志等级
file_handler.setLevel(level=logging.ERROR) # 创建输出的格式
file_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 将格式设置到handler里面去
file_handler.setFormatter(file_format) # 既然文件有一个FileHandler,那么控制台也有一个StreamHandler
# 既然是输出到控制台,那么就不需要参数了
console_handler = logging.StreamHandler() # 设置日志等级,控制台我想看的详细一点,所以设置为INFO
console_handler.setLevel(level=logging.INFO) # 同样要设置日志格式
console_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") console_handler.setFormatter(console_format) # 再将handler添加到logger里面去
logger.addHandler(file_handler)
logger.addHandler(console_handler) logger.info("i am a info")
logger.warning("i am a warning")
logger.error("i am a error")

在控制台和文件中分别输出如下

控制台
2019-06-27 17:32:46,031 - satori - WARNING - i am a warning
2019-06-27 17:32:46,032 - satori - ERROR - i am a error 文件
2019-06-27 17:32:46,032 - satori - ERROR - i am a error

logging:不喜欢写日志可不好哦的更多相关文章

  1. [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件

    本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...

  2. ASP.NET Core 开发-Logging 使用NLog 写日志文件

    ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以 ...

  3. PostgreSQL 预写日志机制(WAL)

    关于持久性 持久性是指,事务提交后,对系统的影响必须是永久的,即使系统意外宕机,也必须确保事务提交时的修改已真正永久写入到永久存储中. 最简单的实现方法,当然是在事务提交后立即刷新事务修改后的数据到磁 ...

  4. Spring 使用 SLF4J代替 Commons Logging 写日志 异常

    项目的日志更换成slf4j和logback后,发现项目无法启动.错误提示 Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/ ...

  5. 程序员的修养 -- 如何写日志(logging)

      在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方.写好程序的日志可以帮助我们大大减轻后期维护压力. 在实际的工作中,开发人员往往迫于的巨大时间压力,而写日志又是一个非常繁琐的事情,往往 ...

  6. winston写日志(译)

    使用 有两种方式去使用winston,直接通过默认的logger,或者实例化自己的Logger,前者设计的目的是在你的应用程序中共享logger比较方便. 使用默认Logger 使用默认的logger ...

  7. 【Python】自己写日志功能

    Python有自带的logging模块,用于日志记录,功能很强大,但不好用,使用挺麻烦的,而且发现了几个bug,调用了一个logger.warning()一次,结果日志文件中出现了n行记录,且逐渐变成 ...

  8. .NET Core的日志[5]:利用TraceSource写日志

    从微软推出第一个版本的.NET Framework的时候,就在“System.Diagnostics”命名空间中提供了Debug和Trace两个类帮助我们完成针对调试和跟踪信息的日志记录.在.NET ...

  9. kettle作业中的js如何写日志文件

    在kettle作业中JavaScript脚本有时候也扮演非常重要的角色,此时我们希望有一些日志记录.下面是job中JavaScript记录日志的方式. job的js写日志的方法. 得到日志输出实例 o ...

随机推荐

  1. php中应用memcached

    PHP连接Memcached 先安装php的memcache扩展 # wget  http://ip/data/attachment/forum/memcache-2.2.3.tgz# tar zxf ...

  2. git重命名文件和文件夹

    git mv -f oldfolder newfoldergit add -u newfolder (-u选项会更新已经追踪的文件和文件夹)git commit -m "changed th ...

  3. JMeter使用plugins插件进行服务器性能监控

    JMeter使用plugins插件进行服务器性能监控 性能测试时,我们的关注点有两部分 1 服务本身:并发响应时间 QPS 2 服务器的资源使用情况:cpu memory I/O disk等 JMet ...

  4. java:svn

    1.配置: 在windows系统中,操作svn的工具最长用的是小乌龟svn 服务器端(项目所在的服务器上):在java开发中几乎所有的服务器为Linux系统 需要在Linux系统中进行安装 1.修改h ...

  5. react native 传值方式之 :子组件通过调用 其父组件传来的方法 传值回其父组件

  6. 【AMAD】tenacity -- Python中一个专门用来retry的库

    动机 简介 用法 基本用法 何时停止 尝试间的等待 何时retry 其它 热度分析 源码分析 个人评分 动机 很多时候,我们都喜欢为代码加入retry功能.比如oauth验证,有时候网络不太灵,我们希 ...

  7. TensorFlow实战第一课(session、Variable、Placeholder、Activation Function)

    莫烦tensorflow教学 1.session会话控制 Tensorflow 中的Session, Session是 Tensorflow 为了控制,和输出文件的执行的语句. 运行session.r ...

  8. 【计算机视觉】背景建模--Vibe 算法优缺点分析

    一.Vibe 算法的优点 Vibe背景建模为运动目标检测研究邻域开拓了新思路,是一种新颖.快速及有效的运动目标检测算法.其优点有以下两点: 1.思想简单,易于实现.Vibe通常随机选取邻域20个样本为 ...

  9. 论文阅读 | Combating Adversarial Misspellings with Robust Word Recognition

    对抗防御可以从语义消歧这个角度来做,不同的模型,后备模型什么的,我觉得是有道理的,和解决未登录词的方式是类似的,毕竟文本方面的对抗常常是修改为UNK来发生错误的.怎么使用backgroud model ...

  10. 再谈mysql锁机制及原理—锁的诠释

    加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...