logging記錄日志

日志是一個系統的重要組成部分,用以記錄用戶操作系統運行狀態錯誤信息。日志記錄的好壞直接關系到系統出現問題時定位的速度。logging模塊Python2.3版本開始成為Python標準庫的一部分。

?

日志級別

在最簡單的使用中,我們直接導入logging模塊,然后調用它的debuginfowarnerrorcritical等函數記錄日志。默認情況下,logging模塊將日志打印到屏幕終端,日志級別為WARNNING,也就是說日志級別大于等于WARNING的日志才會被顯示

#!/usr/bin/python3
import logginglogging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')
default_logging.py

程序執行結果如下:

$ python3 default_logging.py 
WARNING:root:warn message
ERROR:root:error.message
CRITICAL:root:critical.message

日志級別是一個邏輯上的概念,用來區分日志的重要程度。將日志分為不停級別的日志后,一方面可以在大多數時間只保存級別比較高的日志來提高性能;領一方面也便于日志的分析。例如,從一個超大的日志文件中,快速找出幾條錯誤信息。

在python的logging模塊中,日志分為5個級別:

日志級別權重含義
CAITICAL50嚴重錯誤,表名軟件已不能繼續運行了
ERROR40發生嚴重的錯誤,必須馬上處理
WARNING30應用程序可以容忍這些信息,軟件還是在正常工作,不過它們應該被檢查及修復,否則將在不久的將來發生問題
INFO20證明事情按預期工作,突出強調應用程序的運行過程
DEBUG10詳細信息,只有開發人員調試程序時才需要關注的事情

配置日志格式

在使用logging記錄日志之前,我們可以進行一些簡單的配置,如下:

#!/usr/bin/python3
import logginglogging.basicConfig(filename='app.log', level=logging.INFO)logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

執行上面的程序,會在當前目錄下產生一個app.log文件。該文件中存在INFO及INFO以上級別的日志記錄。

上面我們通過basicConfig方法對日志進行了簡單的配置,我們也可以進行更加復雜的日志配置。在這之前先了解logging模塊中的幾個概念:

  • Logger:日志記錄器,是應用程序中能直接使用的接口
  • Handler: 日志處理器,用以表名將日志保存到什么地方以及保存多久
  • Formatter: 格式化,用以配置日志的輸出格式

在典型的使用場景中,一個日志記錄器使用一個日志處理器,一個日志處理器使用一個日志格式化

python的logging模塊提供給你了多種方式來配置日志。對于比較簡單的腳本,可以直接使用basicConfig在代碼中配置日志對于比較復雜的項目,可以將日志的配置保存在一個配置文件中,然后在代碼中使用fileConfig函數讀取配置文件。

?

源碼中配置日志示例

在這個例子中,日志文件會保存所有DEBUG級別及以上級別的日志。每一條日志包含了打印日志的時間,日志的級別和日志的內容

#!/usr/bin/python3
import logginglogging.basicConfig(filename='app.log',level=logging.DEBUG,format='%(asctime)s : %(levelname)s : %(message)s')logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

?

典型的日志配置文件示例

對于復雜的項目,一般將日志配置保存到配置文件中。如下:logging.cnf

#首先在[loggers]聲明一個名為root的logger
[loggers]
keys = root#在[handlers]中聲明一個名為logfile的handler
[handlers]
keys = logfile#在[formatters]中聲明一個名為generic的formatter
[formatters]
keys = generic#在[logger_root]中定義root這個logger所使用的handler
[logger_root]
handlers = logfile#在[handler_logfile]中定義handler輸出日志方式、日志文件的切換時間等
[handler_logfile]
class = handlers.TimedRotatingFileHandler
args = ('app.log',)
level = DEBUG
format = generic#[在formatter_generic]中定義了日志的格式,包括日志產生的時間、日志級別、產生日志的文件名和行號等信息
[formatter_generic]
format = '%(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s'

python代碼中使用logging.config模塊的fileConfig函數加載日志配置

#!/usr/bin/python3
import logging
import logging.configlogging.config.fileConfig('logging.cnf')logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error.message')
logging.critical('critical.message')

轉載于:https://www.cnblogs.com/sellsa/p/10078138.html

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

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

相關文章

C#編程之接口

1.定義 接口是把公共方法和屬性組合起來,以封裝特定功能的一個集合。(一旦定義了接口,就可以在類中實現它。這樣類就可以支持接口所指定的所有屬性和成員) 注意1:接口不能單獨存在。不能像實例化一個類那樣實例化一個接…

supervisor守護進程

2019獨角獸企業重金招聘Python工程師標準>>> supervisor 是一個client/server系統,把不是守護進程的進程變成守護進程,并監控和控制類 Unix 操作系統上的進程。 upervisor就是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變為后臺dae…

神經網絡算法 java 源代碼_神經網絡算法與實現 ——基于Java語言 代碼實例

【實例簡介】Neural Network Programming with Java_ISBN 978-7-115-46093-6【實例截圖】【核心代碼】NeuralNetworkProgrammingwithJava_code└── Neural Network Programming with Java_code├── Chapter1│ ├── HiddenLayer.java│ ├── InputLayer.java│ ├…

javascript面試_在編碼面試中需要注意的3個JavaScript問題

javascript面試JavaScript is the official language of all modern web browsers. As such, JavaScript questions come up in all sorts of developer interviews.JavaScript是所有現代Web瀏覽器的官方語言。 因此,各種開發人員訪談中都會出現JavaScript問題。 T…

【學習筆記】深入理解js原型和閉包(11)——執行上下文棧

繼續上文的內容。 執行全局代碼時,會產生一個執行上下文環境,每次調用函數都又會產生執行上下文環境。當函數調用完成時,這個上下文環境以及其中的數據都會被消除,再重新回到全局上下文環境。處于活動狀態的執行上下文環境只有一個…

Java基礎--訪問權限控制符

今天我們來探討一下訪問權限控制符。 使用場景一:攻城獅A編寫了ClassA,但是他不想所有的攻城獅都可以使用該類,應該怎么辦? 使用場景二:攻城獅A編寫了ClassA,里面有func1方法和func2方法,但是他…

css繪制正方體_設計師僅使用CSS繪制了8個標志性X戰警

css繪制正方體Here are three links worth your time:這是三個值得您花費時間的鏈接: A designer drew 8 iconic X-Men using nothing but CSS (1 minute interactive) 一位設計師僅用CSS繪制了8個標志性的X戰警( 互動時間為1分鐘 ) Raspberry Pi just turned 5. H…

Dubbo簡單介紹及實例

1、概念 Dubbo是一個分布式服務框架,以及阿里巴巴內部的SOA服務化治理方案的核心框架。其功能主要包含:高性能NIO通訊及多協議集成。服務動態尋址與路由。軟負載均衡與容錯,依賴分析與降級等。 說通俗點,就是首先將程序組件化成一…

Oracle 10.2.0.5升級至11.2.0.4

參照MOS 官方文檔Complete Checklist for Manual Upgrade to Oracle Database 11gR2 (11.2) (Doc ID 837570.1)一、升級前的準備1、復制utlu112i.sql腳本從11G數據庫復制$ORACLE_HOME/rdbms/admin/utlu112i.sql 腳本至10g 數據庫臨時目錄,準備執行如果不在10g數據庫…

脫殼_詳細_使用的方法_01

ZC: 如何確定被調試程序已經來到了 未加殼的程序中? ZC:  視頻中是使用判斷集中語言的特征 ZC:  我的方法:上面的方式 ESP平衡 1、第1課 (1)、單步跟蹤(原則:向下的跳轉>正常F8,向上的跳轉>F4跳過(或者用F2…

android 函數式編程_Android開發人員的函數式編程-第1部分

android 函數式編程by Anup Cowkur通過安納普考庫(Anup Cowkur) Android開發人員的函數式編程-第1部分 (Functional Programming for Android Developers — Part 1) Lately, I’ve been spending a lot of time learning Elixir, an awesome functional programming language…

java編程 內存_Java編程技術之淺析JVM內存

JVMJVM->Java Virtual Machine:Java虛擬機,是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。基本認知:1.JVM是用于運行Java代碼的假象計算機,主要有一套字節碼指令…

bzoj1116: [POI2008]CLO

傳送門:http://www.lydsy.com/JudgeOnline/problem.php?id1116 題目大意:Byteotia城市有n個 towns m條雙向roads. 每條 road 連接 兩個不同的 towns ,沒有重復的road. 你要把其中一些road變成單向邊使得:每個town都有且只有一個入度 題解&am…

java排序算法大全_各種排序算法的分析及java實現

排序一直以來都是讓我很頭疼的事,以前上《數據結構》打醬油去了,整個學期下來才勉強能寫出個冒泡排序。由于要找工作了,也知道排序算法的重要性(據說是面試必問的知識點),所以又花了點時間重新研究了一下。排序大的分類可以分為兩…

Cocos2d-x 3.0 簡捷的物理引擎

Cocos2d-x 3.0 開發(九)使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官網Demo 水墨魚的專欄 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 須要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通過Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback,發現它給的 callback 例子中,都是用 IloLPMatrix 這個類放約束條件,在 IloLPMatrix 中, 每個約束條件存儲在 IloRange 中。 使用 IloLPMatrix 的好處是,這個類可以方便查看模型中的求…

6/12 Sprint2 看板和燃盡圖

轉載于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附帶附件_我和我的朋友如何將附帶項目發展為每月$ 17,000的業務

mailto 附帶附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

轉:PHP應用性能優化指南

程序員都喜歡最新的PHP 7,因為它使PHP成為執行最快的腳本語言之一(參考PHP 7 vs HHVM 比較)。但是保持最佳性能不僅需要快速執行代碼,更需要我們知道影響性能的問題點,以及這些問題的解決方案。本文涵蓋了保障PHP應用平…