python设置日志格式

导读:本篇文章讲解 python设置日志格式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

#   %(asctime)s 字符串形式的当前时间。
#   %(levelname)s 文本形式的日志级别
#   %(name)s Logger的名字
#   %(filename)s 调用日志输出函数的模块的文件名
#   %(funcName)s 调用日志输出函数的函数名
#   %(lineno)d 调用日志输出函数的语句所在的代码行
#   %(message)s 用户输出的消息
   

#导包
import  logging

#定义获取logging函数
def get_logging():

    # 自定义日志格式: 
    fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'"

    # 设置日志级别level=logging.DEBUG
    # 将日志信息输出到文件中:filename
    logging.basicConfig(level=logging.DEBUG,filename="../log/log1.log",format=fm)
    return logging

 logging日志模块四大组件

Logger (日志器)
:提供了程序使用日志的入口
Handler (处理器
):将
logger
创建的日志记录发送到合适的目的输出
Formatter( 格式器
):决定日志记录的最终输出格式
Filter (过滤器
):提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录

Logger常用方法
        1.打印日志 : logger.debug() 、logger.info() 、logger.warning() 、logger.error() 、logger.critical()
        2.logger.setLevel() :设置日志器将会处理的日志消息的最低严重级别

        3.logger.addHandler() :为该logger对象添加一个handler对象
        4.logger.addFilter() :为该logger对象添加一个filter对象
Handler处理器 类型:               

        1. 控制台处理器 StreamHandler()
        2. 文件处理器 fileHandler()
        3. 根据大小切割 RotatingFileHandler()
        4. 根据时间切割 TimedRotatingFileHandler()

import logging
import logging.handlers

# 获取logger
logger = logging.getLogger()

# 修改名称
logger = logging.getLogger("user")

# 设置级别
logger.setLevel(logging.INFO)

# 获取控制台 处理器
sh = logging.StreamHandler()

# 或取文件处理器
# 根据时间切割
# when:时间单位
# interval: 时间间隔
# backupcount: 保留的备份数量
th = logging.handlers.TimedRotatingFileHandler(filename="../log/logtime.log", when="S", interval=1, backupCount=3)

# 设置处理器级别,只有error级别才能输入文件
th.setLevel(logging.ERROR)

# 添加格式器
fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
fm = logging.Formatter(fmt)

# 将格式器 添加到处理器中
sh.setFormatter(fm)
th.setFormatter(fm)

# 将处理器添加到logger
logger.addHandler(sh)
logger.addHandler(th)

# 输入信息
logger.debug("debug..")
logger.info("info..")
logger.warning("warning....")
logger.error("err....")

封装

# 导包
import logging.handlers

class GetLogger:
    logger = None

    @classmethod
    def get_logger(cls):

        #判断是否为空
        if cls.logger is None:
            # 获取日志器
            cls.logger = logging.getLogger()
            # 设置日志器级别
            cls.logger.setLevel(logging.INFO)

            # 获取控制台 处理器
            sh = logging.StreamHandler()
            # 获取文件 处理器
            th = logging.handlers.TimedRotatingFileHandler(filename="../log/logtime.log", when='midnight', interval=1,
                                                           backupCount=30, encoding='utf-8')

            # 设置格式器
            fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
            fm = logging.Formatter(fmt)

            # 将格式器添加到处理器中
            sh.setFormatter(fm)
            th.setFormatter(fm)

            # 将处理器添加到 日志器
            cls.logger.addHandler(th)
            cls.logger.addHandler(sh)

        return cls.logger

调用

import time
import unittest
from time import sleep
from parameterized import parameterized
from selenium import webdriver
from selenium.webdriver.common.by import By

from day07.cal.tool.fz_log import GetLogger

logger = GetLogger().get_logger()


class TestCalc(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls):
        logger.info("正在初始化driver...")
        # 实例化浏览器
        cls.driver = webdriver.Chrome()
        # 打开浏览器
        url = 'http://cal.apple886.com/'
        cls.driver.get(url)
        cls.driver.maximize_window()

    @classmethod
    def tearDownClass(cls):
        logger.info("正在关闭driver...")
        # 关闭
        cls.driver.quit()
        cls.driver = None

    # 加法
    def test_Add(self, num1=20, num2=10, expect=30):
        logger.info("正在遍历传进来的第一个数字...")
        # 遍历传进来的数字,并强制转换为字符串
        # 第一个数
        for n in str(num1):
            # 拆开单个按钮的定位方式
            logger.info("正在点击数字:{}".format(n))
            self.driver.find_element(By.CSS_SELECTOR, "#simple{}".format(n)).click()

        logger.info("正在点击加法按钮...")
        # 点击加法按钮
        self.driver.find_element(By.CSS_SELECTOR, "#simpleAdd").click()

        logger.info("正在遍历传进来的第二个数字...")
        # 第二个数
        for n in str(num2):
            # 拆开单个按钮的定位方式
            logger.info("正在点击数字:{}".format(n))
            self.driver.find_element(By.CSS_SELECTOR, "#simple{}".format(n)).click()

        logger.info("正在点击等号按钮...")
        # 点击等号
        self.driver.find_element(By.CSS_SELECTOR, "#simpleEqual").click()

        logger.info("正在获取结果...")
        # 获取结果
        result = self.driver.find_element(By.CSS_SELECTOR, "#resultIpt").get_attribute("value")

        print("实际结果:{},预期结果:{}".format(result, expect))
        try:
            logger.info("正在断言...")
            # 断言
            self.assertEqual(result, str(expect))
        except AssertionError:
            logger.info("正在截图...")
            # 如果实际结果不等于预期结果 截图
            self.driver.get_screenshot_as_file('./{}.png'.format(time.strftime("%Y_%m_%d %H_%M_%S")))

结果

python设置日志格式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48778.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!