Loggiing日誌

小郑[努力版]發表於2024-08-26

日誌處理logging

一、日誌輸出

  1. 日誌預設的輸出等級為:waring級別及以上的等級

  2. 修改日誌的預設輸出等級透過logging.basicConfig(level='INFO')

  3. 記錄日誌列印時間:logging.basicConfig(format=console_fmt)

    console_fmt = "%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s--->%(lineno)d"

    • %(name)s 名字
    • %(levelname)s 日誌級別
    • %(asctime)s 列印時間,年月日十分秒
    • %(message)s 日誌中的資訊
    • %(lineno)d 報錯日誌在程式碼中第幾行
  4. logging.basicConfig(format=console_fmt,level='INFO')

# -*- coding: utf-8 -*-

import logging

logger = logging.getLogger(__name__)
console_fmt = "%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s--->%(lineno)d"

logging.basicConfig(level="INFO",format=console_fmt)

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

二、日誌輸出到控制檯

# Time:2022 2022/3/1 17:20
# Author: Jasmay
# -*- coding: utf-8 -*-

import logging

# 第一步:建立日誌器物件,預設等級為warning
logger = logging.getLogger("這是我的一個小測試日誌")
logging.basicConfig(level="INFO")

# 第二步:建立控制檯日誌處理器
console_handler = logging.StreamHandler()

# 第三步:設定控制檯日誌的輸出級別,需要日誌器也設定日誌級別為info;----根據兩個地方的等級進行對比,取日誌器的級別
console_handler.setLevel(level="WARNING")

# 第四步:設定控制檯日誌的輸出格式
console_fmt = "%(name)s--->%(asctime)s--->%(message)s--->%(lineno)d"
fmt1 = logging.Formatter(fmt=console_fmt)
console_handler.setFormatter(fmt=fmt1)

# 第五步:將控制檯日誌器,新增進日誌器物件中
logger.addHandler(console_handler)


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

三、輸出到日誌檔案

# Time:2022 2022/3/1 17:44
# Author: Jasmay
# -*- coding: utf-8 -*-

# Time:2022 2022/3/1 17:20
# Author: Jasmay
# -*- coding: utf-8 -*-

import logging

# 第一步:建立日誌器物件,預設等級為warning
logger = logging.getLogger("這是我的一個小測試日誌")
logging.basicConfig(level="INFO")

# 第二步:建立檔案日誌處理器
file_handler = logging.FileHandler("./log.txt",mode="a",encoding="utf-8")

# 第三步:設定控制檯日誌的輸出級別,需要日誌器也設定日誌級別為info;----根據兩個地方的等級進行對比,取日誌器的級別


# 第四步:設定控制檯日誌的輸出格式
file_fmt = "%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s"

fmt2 = logging.Formatter(fmt = file_fmt)

file_handler.setFormatter(fmt = fmt2)

# 第五步:將檔案日誌器,新增進日誌器物件中
logger.addHandler(file_handler)



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

四、同時輸出到控制檯+檔案

# Time:2022 2022/3/1 17:20
# Author: Jasmay
# -*- coding: utf-8 -*-

import logging

# 第一步:建立日誌器物件,預設等級為warning
logger = logging.getLogger("這是我的一個小測試日誌")
logging.basicConfig(level="INFO")

# 第二步:建立控制檯日誌處理器+檔案日誌處理器
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler("./log.txt",mode="a",encoding="utf-8")

# 第三步:設定控制檯日誌的輸出級別,需要日誌器也設定日誌級別為info;----根據兩個地方的等級進行對比,取日誌器的級別
console_handler.setLevel(level="WARNING")

# 第四步:設定控制檯日誌和檔案日誌的輸出格式
console_fmt = "%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s--->%(lineno)d"
file_fmt = "%(lineno)d--->%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s"

fmt1 = logging.Formatter(fmt = console_fmt)
fmt2 = logging.Formatter(fmt = file_fmt)

console_handler.setFormatter(fmt = fmt1)
file_handler.setFormatter(fmt = fmt2)

# 第五步:將控制檯日誌器、檔案日誌器,新增進日誌器物件中
logger.addHandler(console_handler)
logger.addHandler(file_handler)



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

五、日誌類:將日誌輸出到控制檯+檔案

# Time:2022 2022/3/2 10:21
# Author: Jasmay
# -*- coding: utf-8 -*-
import logging

class Logger():
    def __init__(self,level="DEBUG"):
        # 建立日誌器物件
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(level)

    def console_handler(self,level="DEBUG"):
        # 建立控制檯的日誌處理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)

        # 處理器新增輸出格式
        console_handler.setFormatter(self.get_formatter()[0])

        # 返回控制器
        return console_handler

    def file_handler(self, level="DEBUG"):
        # 建立檔案的日誌處理器
        file_handler = logging.FileHandler("./log.txt",mode="a",encoding="utf-8")
        file_handler.setLevel(level)

        # 處理器新增輸出格式
        file_handler.setFormatter(self.get_formatter()[1])

        # 返回控制器
        return file_handler

    def get_formatter(self):
        """格式器"""

        console_fmt = logging.Formatter(fmt="%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s")
        file_fmt = logging.Formatter(fmt="%(lineno)d--->%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s")

        # 返回的是一個元組
        return console_fmt,file_fmt

    def get_log(self):
        # 日誌器中新增控制檯處理器
        self.logger.addHandler(self.console_handler())
        # 日誌器中新增檔案處理器
        self.logger.addHandler(self.file_handler())

        # 返回日誌例項物件
        return self.logger

六、呼叫日誌類:將日誌輸出到控制檯+檔案

# Time:2022 2022/3/2 10:45
# Author: Jasmay
# -*- coding: utf-8 -*-
from common.logone import Logger

class TestLog():
    def __init__(self):
        log = Logger()
        self.logger = log.get_log()
    def test_baili_01(self):
        self.logger.info("開始執行")
        self.logger.warning("結束執行")

# 例項化
test  = TestLog()
# 呼叫類中的方法
test.test_baili_01()

相關文章