第十章、logging模块

一、logging模块及日志框架

  1. 导入方式

    import logging
  2. 作用

    写日志

  3. 模块功能

    # V1
    import logging logging .debug(('调试')) #10
    logging.info('正常') #20
    logging.critical('严重错误') #30
    logging.error('错误') #40
    logging.warning('警告') #50
    #默认级别为30以上的可以打印
    # V2
    import logging logging.basicConfig(filename='access.log',
    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
    level=10) logging.debug('调试信息') # 10
    logging.info('正常信息') # 20
    logging.warning('警告信息') # 30
    logging.error('报错信息') # 40
    logging.critical('严重错误信息') # 50
    # V3
    import logging #1.生成一个logger对象
    logger = logging.getLogger('jiayi') # 2. 生成格式
    formmater1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',)
    formmater2 = logging.Formatter('%(asctime)s : %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',)
    formmater3 = logging.Formatter('%(name)s %(message)s',) # 3. 生成一个文件对象
    h1 = logging.FileHandler('h1.log')
    h2 = logging.FileHandler('h2.log')
    sm = logging.StreamHandler() # 4. 文件绑定格式
    h1.setFormatter(formmater1)
    h2.setFormatter(formmater2)
    sm.setFormatter(formmater3) # 5. 绑定文件
    logger.addHandler(h1)
    logger.addHandler(h2)
    logger.addHandler(sm) # 6. 控制级别
    logger.level = 10 #输出级别为10以上的错误 # 7. 使用
    logger.debug('调试信息') # 10
    logger.info('正常信息') # 20
    logger.warning('警告信息') # 30
    logger.error('报错信息') # 40
    logger.critical('严重错误信息') # 50
  4. 日志框架

    import os
    import logging.config # 定义三种日志输出格式 开始
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
    '[%(levelname)s][%(message)s]' # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    # 定义日志输出格式 结束 # ********
    logfile_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录,需要自定义文件路径 # atm
    logfile_dir = os.path.join(logfile_dir, 'log') # C:\Users\oldboy\Desktop\atm\log
    print(logfile_dir)
    logfile_name = 'log.log' # log文件名,需要自定义路径名
    # ***** # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir): # C:\Users\oldboy\Desktop\atm\log
    os.mkdir(logfile_dir) # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name) # C:\Users\oldboy\Desktop\atm\log\log.log
    print('logfile_path:',logfile_path)
    # 定义日志路径 结束 # log配置字典
    LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
    'standard': {
    'format': standard_format
    },
    'simple': {
    'format': simple_format
    },
    },
    'filters': {}, # filter可以不定义
    'handlers': {
    # 打印到终端的日志
    'console': {
    'level': 'DEBUG',
    'class': 'logging.StreamHandler', # 打印到屏幕
    'formatter': 'simple'
    },
    # 打印到文件的日志,收集info及以上的日志
    'default': {
    'level': 'INFO',
    'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
    'formatter': 'standard',
    'filename': logfile_path, # 日志文件
    'maxBytes': 1024 * 1024 * 5, # 日志大小 5M (*****)
    'backupCount': 5,
    'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
    },
    },
    'loggers': {
    # logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
    '': {
    # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
    'handlers': ['default', 'console'],
    'level': 'DEBUG',
    'propagate': False, # 向上(更高level的logger)传递
    },
    },
    } def load_my_logging_cfg():
    logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
    logger = logging.getLogger(__name__) # 生成一个log实例
    logger.info('It works!') # 记录该文件的运行状态 return logger if __name__ == '__main__':
    load_my_logging_cfg()

    直接复制这段代码到py文件里,自己导入一下,然后看这块代码

    def load_my_logging_cfg():
    logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
    logger = logging.getLogger(__name__) # 生成一个log实例
    logger.info('It works!') # 记录该文件的运行状态 return logger

    别的文件里调用这个函数,引用内部函数,调整一下自己想要的格式,信息就能用了,不用看里面具体做什么

第十章、logging模块的更多相关文章

  1. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  2. logging 模块误用导致的内存泄露

    首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging ...

  3. python logging模块详解[转]

    一.简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.war ...

  4. python logging模块

    1.logging模块提供了四个组件logger:日志类,有两个功能1)配置日志的等级,处理器handler,过滤器filterlogger.setLevel(logging.INFO)logger. ...

  5. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

  6. Python之logging模块

    一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...

  7. logging模块转载博客

     转载自:http://blog.csdn.net/zyz511919766/article/details/25136485 简单将日志打印到屏幕: [python] view plain copy ...

  8. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  9. Python中的日志管理Logging模块

    1.基本的用法 import logging logging.debug('This is debug message') logging.info('This is info message') l ...

随机推荐

  1. java ldap用户密码md5加密

    在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题. 在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplat ...

  2. SSM框架—Spring AOP之基于注解的声明式AspectJ(Demo)

    项目结构 XML <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  3. Introduction to statistical learning:with Applications in R (书,数据,R代码,链接)

    http://faculty.marshall.usc.edu/gareth-james/ http://faculty.marshall.usc.edu/gareth-james/ISL/

  4. SQL Server 新建 数据库关系图 时弹出警告提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象。

    今天创建数据库关系图,发现提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用 数据库属性 对话框的文件页或 ALTER AUTHORIZAITION 语句将数据库所有者 ...

  5. Vue 子组件与子组件之间传值

    可以借用公共父元素.子组件A  this.$emit("eventName", data) 触发事件,父组件监听事件,更改父组件 data , 通过Props 传值到子组件B,子组 ...

  6. 执行kubelet卡、解决

    现象: 执行kubectl get po -o wide 非常卡.慢 原因: 修改node名称造成的, 解决: https://my.oschina.net/u/3390908/blog/164976 ...

  7. SpringBoot: 9.整合thymeleaf(转)

    1.创建maven项目,添加项目所需依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springframewo ...

  8. 短路与(&&)、短路或(||)

    昨晚上课,老师用了类似这样的语法 fn&&fn.call(obj) fn&&fn.call(obj)  这里的fn为回调函数.老师在课上也没过多解释这句是啥意思,然后我 ...

  9. 齐治堡垒机ShtermClient-2.1.1命令执行漏洞(CNVD-2019-09593)分析

    一.基本信息 参考:https://www.cnvd.org.cn/flaw/show/1559039 补丁信息:该漏洞的修复补丁已于2019年4月1日发布.如果客户尚未修复该补丁,可联系齐治科技的技 ...

  10. 现代化的拷贝文字---clipboard.js

    参考链接:http://www.clipboardjs.cn/