https://www.cnblogs.com/yyds/p/6901864.html

logging提供给了两种记录日志的方式:

第一种方式是使用logging提供的模块级别的函数

import logging

logging.basicConfig(filename='my.log',level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s ',datefmt='%m/%d/%Y %H:%M:%S %p')

logging.debug("this is a debug log")

logging.info("this is a info log.")

logging.error("this is %d warning  %s log",10,'tom')

basicConfig()是一个日志系统的简单配置工具,只有在第一个调用该函数时会起作用

第二种方式是使用logging日志系统的四大组件

日志系统的四大组件:

Logger            日志器               日志记录的接口

Handler          处理器               设置日记的输出的位置,比如文件,控制台,网路等

Filter             过滤器                个性化日志记录结果的 过滤  ,关于filter有方法                addFilter()    ,      removeFilter()

Formatter      格式器                设置日志记录的格式

Logger就像一个带名字的容器,logger.addHandler(handl1),这样就启用了处理器1   handl1的日志处理器,removeHandler(handl1)可以移除一个处理器

Handler可通过 handl1.setLevel(logging.DEBUG)    , handl1.setFormatter(fomat1),handl1.addFilter(filter1) 设置日志记录的等级和格式,过滤规则

获取一个logger对象,可以通过logging.getLogger(name)获取对应name的标识,默认为‘root',若以相同的name多次调用getLogger()方法,将会返回同一个logger对象

logger对象创建后,可以通过logger.debug(),logger.info(),logger.warning(),logger.error(),logger.critical(),logger.expection()来记录对应等级的日志,

logger.expection()与logger.error()等级一致,只是expection()会记录错误栈

创建handler对象:

logging.StreamHandler()                                                 将日志输出到控制台

logging.FileHandler(filername,encoding='utf-8')            将日志输出到指定磁盘文件,默认文件大小无限增长

logging.handlers.RotatingFileHandler                              输出到文件,支持按日志大小切割

logging.handlers.TimedRotatingFileHandler                    输出到文件,支持按时间切割

logging.handlers.HTTPHandler                                        输出到http服务器,以get或post方式发送

logging.handlers.SMTPHandler                                        输出到指定的email地址

logging.NullHandler                                                          一个空的handler

日志流程

logger作为一个容器也有setLevel() , addFilter()方法,日志先 由 logger 进,总流路径,满足了 logger的level和filter等级才会继续流向 各个分流 Handler

在某分流上,满足这个handler的level和filter的日志 才会输出到handler对应的位置  .; 满足了logger的level和filter的要求的日志同时还会根据propagate的值来判断是否会将消息传给父级logger

import logging

import logging.handlers

import datetime

logger = logging.getLogger('mylogger')

logger.setLevel(logging.DEBUG)

rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0))

rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

f_handler = logging.FileHandler('error.log')

f_handler.setLevel(logging.ERROR)

f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

logger.addHandler(rf_handler)

logger.addHandler(f_handler)

logger.debug('debug message')

logger.info('info message')

logger.warning('warning message')

logger.error('error message')

logger.critical('critical message')

logging- 日志记录的更多相关文章

  1. Python模块学习 ---- logging 日志记录

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4cp ...

  2. Python模块学习:logging 日志记录

    原文出处: DarkBull    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...

  3. python基础语法13 内置模块 subprocess,re模块,logging日志记录模块,防止导入模块时自动执行测试功能,包的理论

    subprocess模块: - 可以通过python代码给操作系统终端发送命令, 并且可以返回结果. sub: 子    process: 进程 import subprocess while Tru ...

  4. python3 logging 日志记录模块

    #coding:utf-8 import logginglogging.basicConfig(filename='log1.log', format='%(asctime)s -%(name)s-% ...

  5. Python开发之日志记录模块:logging

    1 引言 最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得.不得不说,有许多博主大牛总结得确实很好.似乎我再写 ...

  6. SLF4J - 一个允许你统一日志记录API的抽象层

    一.什么是SLF4J 我们在做Java开发时,如果需要记录日志,有很多日志API可供选择,如: java.util.logging Apache log4j logback SLF4J又是个什么东东呢 ...

  7. logging日志管理--将日志打印在屏幕上

    # -*- coding: cp936 -*- # test.py #http://blog.chinaunix.net/uid-27571599-id-3492860.html #logging日志 ...

  8. python中利用logging包进行日志记录时的logging.level设置选择

    之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...

  9. 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)

    前言: 本章介绍自己写的基于java.util.logging的轻量级日志记录库(baseLog). 该版本的日志记录库犹如其名,baseLog,是个实现日志记录基本功能的小库,适合小型项目使用,方便 ...

  10. Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例

    本文目录 1. Net下日志记录 2. NLog的使用     2.1 添加nuget引用NLog.Web.AspNetCore     2.2 配置文件设置     2.3 依赖配置及调用     ...

随机推荐

  1. 简单Shell案例

    使用shell命令进行左对齐或者右对齐 [root@bj-aws-yace-tbj mnt]# cat test.sh #! /bin/bash file=./test.txt echo -e &qu ...

  2. 【ssh免登录】设置集群环境ssh免登录步骤

    1.每台机器都需要执行,生成自己的密钥 # ssh-keygen -t rsa 过程中遇到选项,全部enter #cd ~/.ssh # cat id_rsa.pub > authorized_ ...

  3. Visual Studio 项目模板制作(三)

    前面,我们已经制作好了模板,然后放到相应的Template目录就可以在Visual Studio中使用 本篇,我们采用安装VSIX扩展的方式来安装模板,这种方式需要安装Visual Studio SD ...

  4. QQ名片自动点赞

    2017-01-23 简介:QQ名片自动点赞,1秒左右可点完1屏好友的赞,每个好友10个赞. 尺寸: 720*1280 DPI:320 宿主:3.1.2.10711 系统:Android v5.11 ...

  5. ng-model 数据不更新 及 ng-repeat【ngRepeat:dupes】错误

    一.ng-include 引入的文件中 ,ng-model 数据不更新 例如, $scope.username = “Jones”  .此时,在 ng-include 引入的文件中,直接使用 ng-m ...

  6. python 函数赋值

    ⾸先我们来理解下Python中的函数 def hi(name="yasoob"): return "hi " + name print(hi()) # outp ...

  7. [设计模式][c++]状态切换模式

    转自:http://blog.csdn.net/yongh701/article/details/49154439 状态模式也是设计模式的一种,这种设计模式思想不复杂,就是实现起来的代码有点复杂.主要 ...

  8. 你的centos/linux下有多个php.ini,不确定是哪个时

    你的centos/linux下有多个php.ini,不确定是哪个时,但是你自己知道,你的php安装目录. 比如我的php安装目录是 /usr/local/php 那么可以通过命令来查找php.ini的 ...

  9. [Java学习] JSON工具学习记录--FastJSON

    最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...

  10. 012 - jstat命令查看jvm的GC情况 | jvm

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量. 命令的格式如下: jstat -<option> [-t] [-h<lines>] <vmid> [ ...