31天Python入門——第15天:日志記錄

在這里插入圖片描述

你好,我是安然無虞。

文章目錄

    • 日志記錄
      • python的日志記錄模塊
      • 創建日志處理程序并配置輸出格式
        • 將日志內容輸出到控制臺
        • 將日志寫入到文件
      • logging更簡單的一種使用方式

在這里插入圖片描述

日志記錄

日志記錄是一種重要的應用程序開發和維護技術, 它用于記錄應用程序運行時的關鍵信息和事件.

通過適當的日志記錄, 我們可以追蹤應用程序的行為、排查問題和監控系統狀態.

Python 提供了內置的 logging 模塊, 使得日志記錄變得簡單而強大, 日志記錄是將應用程序運行時的關鍵信息寫入日志文件或輸出到控制臺.

它有以下主要目的和優勢:

  • 問題排查:當應用程序出現錯誤或異常時, 日志記錄提供了有關問題的關鍵信息, 有助于快速定位和修復錯誤.
  • 系統監控:通過記錄應用程序的運行狀態、資源使用情況和性能指標, 日志記錄可以幫助我們監控系統的健康狀況.
  • 運行分析:日志記錄允許我們跟蹤應用程序的執行流程和事件, 以便進行性能分析、行為分析和用戶行為分析.

python的日志記錄模塊

Python 提供了內置的 logging 模塊, 它是一個強大而靈活的日志記錄工具.要使用 logging 模塊, 先導入, 然后創建日志記錄器

 import logging# 創建日志記錄器logger = logging.getLogger('my_logger')

設置日志級別

日志級別決定了哪些日志消息會被記錄下來.logging 模塊定義了以下幾個日志級別(從低到高):

  • DEBUG: 詳細的調試信息, 適用于開發環境.
  • INFO: 普通的信息消息, 用于確認應用程序的正常運行.
  • WARNING: 警告消息, 表示潛在的問題或不合適的使用.
  • ERROR: 錯誤消息, 表示應用程序遇到可恢復的錯誤.
  • CRITICAL: 嚴重錯誤消息, 表示應用程序遇到無法恢復的錯誤.

可以設置日志記錄器的級別, 以決定哪些級別的日志消息會被記錄.默認情況下, 日志記錄器的級別是 WARNING, 這意味著只有 WARNINGERRORCRITICAL 級別的消息會被記錄.

 logger.setLevel(logging.DEBUG)
import logging# 創建日志記錄器.
logger = logging.getLogger('my_logger')logger.debug(f'這是一條 debug 日志信息.')
logger.info(f'這是一條 info 日志信息.')
logger.warning(f'這是一條 warning 日志信息.')
logger.error(f'這是一條 error 日志信息.')
logger.critical(f'這是一條 critical 日志信息.')# 輸出結果:
這是一條 warning 日志信息.
這是一條 error 日志信息.
這是一條 critical 日志信息.

創建日志處理程序并配置輸出格式

日志處理程序是 logging 模塊用于處理和輸出日志消息的組件.我們可以為日志記錄器添加一個或多個處理程序, 以決定日志消息的輸出位置.

# 輸出到控制臺.
handler = logging.StreamHandler()
# 配置輸出格式
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
handler.setFormatter(formatter)

將處理程序添加到日志記錄器.

 logger.addHandler(handler)
將日志內容輸出到控制臺

import logging# 創建日志記錄器.
logger = logging.getLogger('my_logger')
# 設置日志記錄的級別
logger.setLevel(logging.INFO)
# 輸出到控制臺. 創建一個日志處理程序.
handler = logging.StreamHandler()
# 設置日志處理器級別 - 程序中設置的日志級別必須不低于日志處理器級別才能記錄
handler.setLevel(logging.INFO)
# 配置日志輸出的格式.
formatter = logging.Formatter('[%(name)s] %(asctime)s [%(levelname)s] %(message)s')
# 將輸出的格式添加到handler里面來.
handler.setFormatter(formatter)
# 將日志處理程序添加到logger.
logger.addHandler(handler)logger.debug(f'這是一條 debug 日志信息.')
logger.info(f'這是一條 info 日志信息.')
logger.warning(f'這是一條 warning 日志信息.')
logger.error(f'這是一條 error 日志信息.')
logger.critical(f'這是一條 critical 日志信息.')# 顯示如下內容:[my_logger] 2025-03-23 15:38:52,264 [INFO] 這是一條 info 日志信息.
[my_logger] 2025-03-23 15:38:52,264 [WARNING] 這是一條 warning 日志信息.
[my_logger] 2025-03-23 15:38:52,264 [ERROR] 這是一條 error 日志信息.
[my_logger] 2025-03-23 15:38:52,264 [CRITICAL] 這是一條 critical 日志信息.
將日志寫入到文件

要將日志寫入到文件只需要將創建日志處理程序的StreamHandler更換為FileHandler

 file_handler = logging.FileHandler('my_logger.log')

將日志記錄內容既輸出到控制臺又輸出到文件中:

import logging# 創建日志記錄器.
# logging.basicConfig()
logger = logging.getLogger(__name__)
# 設置日志記錄的級別
logger.setLevel(logging.INFO)
# 輸出到控制臺. 創建一個日志處理程序.
handler = logging.StreamHandler()
file_handler = logging.FileHandler('my_logger.log', encoding='utf8')
# 配置日志輸出的格式.
formatter = logging.Formatter('[%(name)s] %(asctime)s [%(levelname)s] %(message)s')
# 將輸出的格式添加到handler里面來.
handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 將日志處理程序添加到logger.
logger.addHandler(handler)
logger.addHandler(file_handler)logger.debug(f'這是一條 debug 日志信息.')
logger.info(f'這是一條 info 日志信息.')
logger.warning(f'這是一條 warning 日志信息.')
logger.error(f'這是一條 error 日志信息.')
logger.critical(f'這是一條 critical 日志信息.')

如果僅僅想讓日志內容輸出到文件中, 可以把之前創建的輸出到控制臺的handler刪除(只保留輸出到文件中的handler)即可:

import logging# 創建日志記錄器.
# logging.basicConfig()
logger = logging.getLogger(__name__)
# 設置日志記錄的級別
logger.setLevel(logging.INFO)
# 輸出到控制臺. 創建一個日志處理程序.
file_handler = logging.FileHandler('my_logger.log', encoding='utf8')
# 配置日志輸出的格式.
formatter = logging.Formatter('[%(name)s] %(asctime)s [%(levelname)s] %(message)s')
# 將輸出的格式添加到handler里面來.
file_handler.setFormatter(formatter)
# 將日志處理程序添加到logger.
logger.addHandler(file_handler)logger.debug(f'這是一條 debug 日志信息.')
logger.info(f'這是一條 info 日志信息.')
logger.warning(f'這是一條 warning 日志信息.')
logger.error(f'這是一條 error 日志信息.')
logger.critical(f'這是一條 critical 日志信息.')

logging更簡單的一種使用方式

這種使用方式較上面的使用方式更簡單:

logging.basicConfig(level=logging.DEBUG,format='[%(name)s] %(asctime)s [%(levelname)s] %(message)s',)
logger = logging.getLogger('my_name')
import logginglogging.basicConfig(level=logging.INFO,format='[%(name)s] %(asctime)s [%(levelname)s] %(message)s',handlers=[logging.StreamHandler(),logging.FileHandler('my_logger.log', encoding='utf8')]
)
logger = logging.getLogger('my_name')# 模擬用戶名校驗.
def check_username(username):"""1. 長度不能小于5.2. 只能包含字符.3. 禁止使用系統用戶名. admin, root.:param username: 傳入的用戶名.:return: None."""logger.debug(f'正在備校驗{username}')if username in ['admin', 'root']:raise ValueError('禁止使用系統用戶名')if len(username) < 5:raise ValueError('用戶名長度小于5')if not username.isalpha():raise ValueError('用戶名只能包含字符')# 如果上面的3個判斷都沒進, 就會走到這里.logger.info(f'{username}校驗成功.')try:username = input("請輸入用戶名:")logger.debug(f'準備校驗{username}')check_username(username)
except ValueError as e:# 此處username發出黃色警告, 我在視頻中是故意不講的, 因為已經講過很多次了.# 希望大家自己動手解決一下此處username發出黃色警告的問題.logger.error(f'用戶名{username}校驗失敗: 失敗原因{e}')
遇見安然遇見你,不負代碼不負卿。
謝謝老鐵的時間,咱們下篇再見~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73564.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI Agent開發大全第八課-Stable Diffusion 3的本地安裝全步驟

前言 就像我們前面幾課所述,本系列是一門體系化的教學,它不像網上很多個別存在的單篇博客走“吃快餐”模式,而是從扎實的基礎來帶領大家一步步邁向AI開發高手。所以我們的AI課程設置是相當全面的,除了有牢固的基礎知識外還有外面互聯網上也搜不到的生產級實戰。 前面講過…

用selenium+ChromeDriver豆瓣電影 肖申克的救贖 短評爬取(pycharm 爬蟲)

一、豆瓣電影 肖申克的救贖 短評urlhttps://movie.douban.com/subject/1292052/comments 二、基本知識點講解 1. Selenium 的基本使用 Selenium 是一個用于自動化瀏覽器操作的庫&#xff0c;常用于網頁測試和爬蟲。代碼中使用了以下 Selenium 的核心功能&#xff1a; webdriv…

開源在線客服系統源碼-前端源碼加載邏輯

客服源碼是使用Golang(又稱Go)開發的&#xff0c;Go是Google公司開發的一種靜態強類型、編譯型、并發型&#xff0c;并具有垃圾回收功能的編程語言。Go 天生支持并發。好處太多就不多說了。 全源碼客服系統用戶&#xff0c;想要針對自己的業務&#xff0c;進行二次開發&#xf…

Oracle數據庫服務器地址變更與監聽配置修改完整指南

一、前言 在企業IT運維中&#xff0c;Oracle數據庫服務器地址變更是常見的運維操作。本文將詳細介紹如何安全、高效地完成Oracle數據庫服務器地址變更及相關的監聽配置修改工作&#xff0c;確保數據庫服務在遷移后能夠正常運行。 二、準備工作 1. 環境檢查 確認新舊服務器I…

g對象在flask中主要是用來實現什么

在Flask中&#xff0c;g對象&#xff08;全稱flask.g&#xff09;是一個線程局部&#xff08;thread-local&#xff09;的臨時存儲對象&#xff0c;主要用于在單個請求的上下文&#xff08;request context&#xff09;中共享數據。它的核心作用是為同一請求的不同處理階段&…

工具介紹《WireShark》

Wireshark 過濾命令中符號含義詳解 一、比較運算符 Wireshark 支持兩種比較運算符語法&#xff1a;英文縮寫&#xff08;如 eq&#xff09;和 C語言風格符號&#xff08;如 &#xff09;&#xff0c;兩者功能等價。 符號&#xff08;英文縮寫&#xff09;C語言風格符號含義示…

JavaScrip-模版字符串的詳解

1.模版字符串的詳解 1.1 模版字符串的使用方法 在ES6之前&#xff0c;如果我們想要將字符串和一些動態的變量&#xff08;標識符&#xff09;拼接到一起&#xff0c;是非常丑陋的&#xff08;ugly) ES6允許我們使用模版字符串來嵌入變量或者表達式來進行拼接 首先&#xff0c;…

STM32C011 進入停止模式和待機模式

對于STM32C011J4M3微控制器&#xff0c;你可以使用HAL庫來實現進入停止模式&#xff08;Stop Mode&#xff09;和待機模式&#xff08;Standby Mode&#xff09;。下面是進入停止模式和待機模式的示例代碼&#xff1a; 進入停止模式代碼示例&#xff1a; #include "stm3…

海康設備http監聽接收報警事件數據

http監聽接收報警事件數據 海康獲取設備報警事件數據兩種方式&#xff1a; 1、sdk 布防監聽報警事件數據&#xff08;前面文章有示例&#xff09; 2、http監聽接收報警事件數據 http監聽接收報警事件數據&#xff0c;服務端可以使用netty通過端口來監聽獲取事件數據。 WEB 端…

FastAPI 全面指南:功能解析與應用場景實踐

FastAPI 全面指南&#xff1a;功能解析與應用場景實踐 FastAPI 是一個現代、快速&#xff08;高性能&#xff09;的 Python Web 框架&#xff0c;用于構建 API。它基于標準 Python 類型提示&#xff0c;使用 Starlette 和 Pydantic 構建&#xff0c;提供了極高的性能并簡化了開…

【STM32】編寫程序控制開發板的RGB LED燈

目錄 1、原理圖2、文件結構3、使用寄存器模式點亮3.1、什么是寄存器3.2、寄存器開發的本質3.3、寄存器開發步驟3.4、主要源碼3.4.1、main.c3.4.2、drv_gpio.h3.4.3、drv_gpio.c3.4.4、使用BSRR和BRR影子寄存器優化drv_gpio.c3.4.5、效果演示 4、使用標準庫模式點亮4.1、使用標準…

MyBatis-Plus 的加載及初始化

在 Spring Boot 啟動過程中&#xff0c;MyBatis-Plus 的加載和初始化涉及多個階段的工作。這些工作包括 MyBatis-Plus 自身的配置解析、Mapper 接口的掃描與注冊、SQL 語句的動態注入以及底層 MyBatis 的初始化等。以下是對整個過程的詳細分析&#xff1a; 1. Spring Boot 啟動…

SpringBoot中安全的設置阿里云日志SLS的accessKey

眾所周知,阿里云的服務都是基于accesskeyId和accesskeySecret來進行身份鑒權的,但唯獨日志因為需要寫入到.xml文件里對于accesskeyId和accesskeySecret需要進行一定程度的改進,尤其是使用了jasypt進行加密的參數傳遞進去logback.xml更是會遇到需要對參數進行解密的問題,而官網只…

關于解決Ubuntu終端及系統字體大小的問題

在Ubuntu中調整終端和系統字體大小可以通過以下方法&#xff08;可能不僅僅只是這幾種&#xff09;實現&#xff1a; 1. 調整系統字體大小 打開終端并輸入以下命令&#xff0c;安裝GNOME Tweaks&#xff0c;等待安裝完成&#xff1a; sudo apt install gnome-tweaks 接著進行…

Rust vs. Go: 性能測試(2025)

本內容是對知名性能評測博主 Anton Putra Rust vs. Go (Golang): Performance 2025 內容的翻譯與整理, 有適當刪減, 相關數據和結論以原作結論為準。 再次對比 Rust 和 Go&#xff0c;但這次我們使用的是最具性能優勢的 HTTP 服務器庫---Hyper&#xff0c;它基于 Tokio 異步運…

【NLP 48、大語言模型的神秘力量 —— ICL:in context learning】

目錄 一、ICL的優勢 1.傳統做法 2.ICL做法 二、ICL的發展 三、ICL成因的兩種看法 1.meta learning 2.Bayesian Inference 四、ICL要點 ① 語言模型的規模 ② 提示詞prompt中提供的examples數量和順序 ③ 提示詞prompt的形式&#xff08;format&#xff09; 五、fine-tune VS I…

兩數之和解題記錄

開始打算用一個數組保存差值&#xff0c;arr[target-nums[i]] i, 只要arr[nums[i]]有內容就能滿足target&#xff0c;返回arr[nums[i]]和i。但是會出現復數的情況&#xff0c;所以換成map。 換成map就只用一邊遍歷&#xff0c;一遍檢查和存入對應key就行了&#xff0c;value就…

P1722 矩陣Ⅱ - 洛谷

題源&#xff1a;P1722 矩陣 II - 洛谷 看了題目之后&#xff0c;需要注意的是&#xff1a; ①在1 ~ i 個格子中紅色數量 > 黑色數量 ②最后&#xff0c;在2 * n 個格子中&#xff0c;紅色數量 黑色數量 根據這兩個約束條件&#xff0c;可以知道&#xff0c;第一個格…

數據庫——MySQL基礎操作

一、表結構與初始數據 假設存在以下兩張表&#xff1a; 1. student 表 字段名數據類型描述idINT學生唯一標識符nameVARCHAR(100)學生姓名ageINT學生年齡sexVARCHAR(10)學生性別 初始數據&#xff1a; idnameagesex1張三20男2李四22女3王五21男 2. course 表 字段名數據類…

行業白皮書2025 | 益企研究院:AI時代的存儲基石

在當今科技飛速發展的時代&#xff0c;AI技術已成為推動各行業變革的關鍵力量。日前&#xff0c;益企研究院重磅發布《AI時代的存儲基石》白皮書。 下載方式&#xff1a;關注“渡江客涂鴉板”&#xff0c;回復st250326獲取免費下載地址 數據需求與技術挑戰&#xff1a; AI技術…