python 日志模块的例子

import os, shutil
import time
import logging


def simple_log(log_dir=None, log_name=None):
    if log_dir == None:
        log_dir = "log_dir"

    path = os.path.join(os.path.abspath("."), log_dir)

    if os.path.exists(path):
        print("日志文件已存在")
        # shutil.rmtree(path)  # 递归删除文件夹
    else:
        os.makedirs(path)
        print("创建日志文件成功")

    # 配置日志信息
    if log_name == None:
        log_name = "demo.log"
    log_name = os.path.join(path, log_name)

    # 创建一个日志 logger 实例
    logger = logging.getLogger()
    logging.debug("DEBUG")   # 设置日志级别为 DEBUG, 覆盖掉默认的日志级别 Warning

    # 创建一个 handler,用于写入日志文件, handler 可以把日志写到不同的地方
    fh = logging.FileHandler(log_name, "w+", encoding="utf-8")  # 将日志写在文件中
    fh.setLevel(logging.INFO)   # 设置日志的级别为  INFO

    # 再创建一个 handler, 用于输出控制台
    ch = logging.StreamHandler()
    ch.setLevel(logging.INFO)   # 设置日志的级别为 INFO

    # 定义handler的格式输出
    log_format = logging.Formatter("%(asctime)s - %(filename)s - %(levelname)s - %(name)s - %(message)s") # 时间,文件名称,日志级别, 日志器名称, 字段信息

    fh.setFormatter(log_format)    # handler 加载设置的格式输出
    ch.setFormatter(log_format)    # handler 加载设置的格式输出

    # 为 logger 添加handler
    logger.addHandler(fh)
    logger.addHandler(ch)
    return logger

if __name__ == '__main__':
    logging = simple_log()
    if 2 > 10:
        logging.warning("你好啊!!!")
    else:
        logging.warning("我不好!!!")

例子2:

"""
使用logging四大组件记录日志
"""
"""
1. 需求
现在有以下几个日志记录的需求:
    1)要求将所有级别的所有日志都写入磁盘文件中
    2)all.log 文件中记录所有的日志信息,日志格式为:日期和时间 - 日志级别 - 日志信息
    3)error.log 文件中单独记录error及以上级别的日志信息,日志格式为:日期和时间 - 日志级别 - 文件名[:行号] - 日志信息
    4)要求all.log 在每天凌晨进行日志切割

2. 分析

    1)要记录所有级别的日志,因此日志器的有效level需要设置为最低级别--DEBUG;
    2)日志需要被发送到两个不同的目的地,因此需要为日志器设置两个handler;另外,两个目的地都是磁盘文件,因此这两个handler都是与FileHandler相关的;
    3)all.log要求按照时间进行日志切割,因此他需要用logging.handlers.TimedRotatingFileHandler; 而error.log没有要求日志切割,因此可以使用FileHandler;
    4)两个日志文件的格式不同,因此需要对这两个handler分别设置格式器;
"""

import logging
import logging.handlers
import datetime

logger = logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)          # 设置最低级别的 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", encoding="utf-8")   # 写入日志文件
f_handler.setLevel(logging.ERROR)                # 设置日志等级
f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s")) # 设置信息格式

logger.addHandler(rf_handler)  # 添加处理器    rf_handler
logger.addHandler(f_handler)   # 添加处理器    f_handler

logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
logger.critical("critical message")








  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值