Log 日志的使用與重要性

開發過程中出現bug是必不可免的,你會怎樣debug?從第1行代碼開始看么?還是有個文件里面記錄著哪里錯了更方便呢!!!log日志

Python中有個logging模塊可以完成相關信息的記錄,在debug時用它往往事半功倍

1. 日志級別

日志一共分成5個等級,從低到高分別是:

  1. DEBUG
  2. INFO
  3. WARNING
  4. ERROR
  5. CRITICAL

說明:

  • DEBUG:詳細的信息,通常只出現在診斷問題上
  • INFO:確認一切按預期運行
  • WARNING:一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁盤空間低”)。這個軟件還能按預期工作。
  • ERROR:更嚴重的問題,軟件沒能執行一些功能
  • CRITICAL:一個嚴重的錯誤,這表明程序本身可能無法繼續運行

這5個等級,也分別對應5種打日志的方法: debug 、info 、warning 、error 、critical。默認的是WARNING,當在WARNING或之上時才被跟蹤。

2. 日志輸出

有兩種方式記錄跟蹤,一種輸出控制臺,另一種是記錄到文件中,如日志文件。

2.1、將日志輸出到控制臺

比如,log1.py 如下:

import logging  logging.basicConfig(level=logging.WARNING,  format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  # 開始使用log功能
logging.info('這是 loggging info message')  
logging.debug('這是 loggging debug message')  
logging.warning('這是 loggging a warning message')  
logging.error('這是 an loggging error message')  
logging.critical('這是 loggging critical message')

運行結果

2017-11-06 23:07:35,725 - log1.py[line:9] - WARNING: 這是 loggging a warning message
2017-11-06 23:07:35,725 - log1.py[line:10] - ERROR: 這是 an loggging error message
2017-11-06 23:07:35,725 - log1.py[line:11] - CRITICAL: 這是 loggging critical message

說明

通過logging.basicConfig函數對日志的輸出格式及方式做相關配置,上面代碼設置日志的輸出等級是WARNING級別,意思是WARNING級別以上的日志才會輸出。另外還制定了日志輸出的格式。

注意,只要用過一次log功能再次設置格式時將失效,實際開發中格式肯定不會經常變化,所以剛開始時需要設定好格式

2.2、將日志輸出到文件

我們還可以將日志輸出到文件,只需要在logging.basicConfig函數中設置好輸出文件的文件名和寫文件的模式。

log2.py 如下:

import logging  logging.basicConfig(level=logging.WARNING,  filename='./log.txt',  filemode='w',  format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  
# use logging  
logging.info('這是 loggging info message')  
logging.debug('這是 loggging debug message')  
logging.warning('這是 loggging a warning message')  
logging.error('這是 an loggging error message')  
logging.critical('這是 loggging critical message')

運行效果

python@ubuntu: cat log.txt 
2017-11-06 23:10:44,549 - log2.py[line:10] - WARNING: 這是 loggging a warning message
2017-11-06 23:10:44,549 - log2.py[line:11] - ERROR: 這是 an loggging error message
2017-11-06 23:10:44,549 - log2.py[line:12] - CRITICAL: 這是 loggging critical message

2.3、既要把日志輸出到控制臺, 還要寫入日志文件

這就需要一個叫作Logger 的對象來幫忙,下面將對他進行詳細介紹,現在這里先學習怎么實現把日志既要輸出到控制臺又要輸出到文件的功能。

import logging  # 第一步,創建一個logger  
logger = logging.getLogger()  
logger.setLevel(logging.INFO)  # Log等級總開關  # 第二步,創建一個handler,用于寫入日志文件  
logfile = './log.txt'  
fh = logging.FileHandler(logfile, mode='a')  # open的打開模式這里可以進行參考
fh.setLevel(logging.DEBUG)  # 輸出到file的log等級的開關  # 第三步,再創建一個handler,用于輸出到控制臺  
ch = logging.StreamHandler()  
ch.setLevel(logging.WARNING)   # 輸出到console的log等級的開關  # 第四步,定義handler的輸出格式  
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")  
fh.setFormatter(formatter)  
ch.setFormatter(formatter)  # 第五步,將logger添加到handler里面  
logger.addHandler(fh)  
logger.addHandler(ch)  # 日志  
logger.debug('這是 logger debug message')  
logger.info('這是 logger info message')  
logger.warning('這是 logger warning message')  
logger.error('這是 logger error message')  
logger.critical('這是 logger critical message')

運行時終端的輸出結果:

2017-11-06 23:14:04,731 - log3.py[line:28] - WARNING: 這是 logger warning message
2017-11-06 23:14:04,731 - log3.py[line:29] - ERROR: 這是 logger error message
2017-11-06 23:14:04,731 - log3.py[line:30] - CRITICAL: 這是 logger critical message

在log.txt中,有如下數據:

2017-11-06 23:14:04,731 - log3.py[line:27] - INFO: 這是 logger info message
2017-11-06 23:14:04,731 - log3.py[line:28] - WARNING: 這是 logger warning message
2017-11-06 23:14:04,731 - log3.py[line:29] - ERROR: 這是 logger error message
2017-11-06 23:14:04,731 - log3.py[line:30] - CRITICAL: 這是 logger critical message

3、日志格式說明

logging.basicConfig函數中,可以指定日志的輸出格式format,這個參數可以輸出很多有用的信息,如下:

  • %(levelno)s: 打印日志級別的數值
  • %(levelname)s: 打印日志級別名稱
  • %(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
  • %(filename)s: 打印當前執行程序名
  • %(funcName)s: 打印日志的當前函數
  • %(lineno)d: 打印日志的當前行號
  • %(asctime)s: 打印日志的時間
  • %(thread)d: 打印線程ID
  • %(threadName)s: 打印線程名稱
  • %(process)d: 打印進程ID
  • %(message)s: 打印日志信息

在工作中給的常用格式如下:

format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'

這個格式可以輸出日志的打印時間,是哪個模塊輸出的,輸出的日志級別是什么,以及輸入的日志內容。

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

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

相關文章

webdriver 的三種等待方式

1、顯式等待 一個顯式等待是你定義的一段代碼,用于等待某個條件發生然后再繼續執行后續代碼。 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait #…

Django的核心思想ORM

元類實現ORM 1. ORM是什么 ORM 是 python編程語言后端web框架 Django的核心思想,“Object Relational Mapping”,即對象-關系映射,簡稱ORM。 一個句話理解就是:創建一個實例對象,用創建它的類名當做數據表名&#x…

Secondary Namenode的Check point機制以及Namenode、Datanode工作機制說明

目錄前言:1、NameNode的工作機制2、DataNode的工作機制3、Secondary Namenode的Check point機制 目錄 前言: 在說明checkpoint機制之前,先要了解下namenode、datanode的一些功能和職責。 1、NameNode的工作機制 問題場景: 1…

表單驗證的初步實現和省市級聯

1.表單驗證的初步實現 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html xmlns"http://www.w3.org/1999/xhtml" lang"en"><head><meta http-equiv"Conte…

抓包軟件:Charles

修正&#xff1a;手機不必一定連接電腦分享的熱點&#xff0c;只需要手機和電腦在同一個局域網下就可以了&#xff0c;手機代理IP設置為電腦的IP。 之前寫過一篇通過Wireshark進行抓包&#xff0c;分析網絡連接的文章《通過WireShark抓取iOS聯網數據實例分析》&#xff1a;htt…

Hive的相關介紹

目錄前言&#xff1a;1、Hive簡介2、Hive架構3、Hive與Hadoop的關系4、Hive與傳統數據庫對比5、Hive的數據存儲總結&#xff1a; 目錄 前言&#xff1a; 為什么使用Hive 直接使用hadoop所面臨的問題 人員學習成本太高 項目周期要求太短 MapReduce實現復雜查詢邏輯開發難…

數據結構實驗之排序七:選課名單

數據結構實驗之排序七&#xff1a;選課名單 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 隨著學校規模的擴大&#xff0c;學生人數急劇增加&#xff0c;選課名單的輸出也成為一個繁重的任務&#xff0c;我校目前有在校生3萬多名&#xff0…

Java第五次作業--面向對象高級特性(抽象類和接口)

一、學習要點 認真看書并查閱相關資料&#xff0c;掌握以下內容&#xff1a; 掌握抽象類的設計掌握接口的設計理解簡單工廠設計模式理解抽象類和接口的區別掌握包裝類的應用掌握對象的比較方法和比較器的使用學習使用日期操作類學習匿名內部類的使用二、作業要求 發布一篇隨筆&…

關于國內廠商的國際版殺毒軟件

很多國內軟件公司的殺毒軟件都分為國內版和國際版&#xff0c;這二者有什么區別呢&#xff1f; 首先&#xff0c;這兩個的團隊是不一樣的。國際版的團隊大多收購&#xff0c;國內版為自研。例如百度殺毒的國際版就是原超級巡警的團隊做的&#xff0c;而國內版是自己另起爐灶。…

gulp教程之gulp-minify-css【gulp-clean-css】

原文&#xff1a;http://www.ydcss.com/archives/41 簡介&#xff1a; 使用gulp-minify-css壓縮css文件&#xff0c;減小文件大小&#xff0c;并給引用url添加版本號避免緩存。重要&#xff1a;gulp-minify-css已經被廢棄&#xff0c;請使用gulp-clean-css&#xff0c;用法一致…

大數據面試題總結(附答案)

文章目錄前言hadoop相關試題Hive相關試題Hbase相關試題Storm相關試題Spark相關試題Java基礎試題其他前言 最近由于要準備面試就開始提早看些面試、筆試題。以下是自己總結的一些經常出現、有價值的試題&#xff0c;包含hadoop、hive、hbase、storm、spark等。答案僅供參考&…

win7 IE11卸載后無法上網

今天某同事需要訪問一個銀行網站&#xff0c;必須使用IE8,我在win7中降級IE11,直接卸載了IE11和其語言包&#xff0c;發現IE8再也打不開網頁了&#xff0c;每次打開都提示保存html網頁。測試Google Chrome上網完全沒有問題。IE8的internet選項等任何工具菜單點擊均無反應&#…

關于django的模板

模板 問題 如何向請求者返回一個漂亮的頁面呢&#xff1f; 肯定需要用到html、css&#xff0c;如果想要更炫的效果還要加入js&#xff0c;問題來了&#xff0c;這么一堆字段串全都寫到視圖中&#xff0c;作為HttpResponse()的參數嗎&#xff1f;這樣定義就太麻煩了吧&#x…

Hbase簡介及常用命令相關知識總結

文章目錄目錄前言&#xff1a;1.Hbase簡介1.1、什么是Hbase1.2、與傳統數據庫的對比1.3、Hbase集群中的角色2、Hbase數據模型3、Hbase命令總結&#xff1a;目錄 前言&#xff1a; 對于Hbase來說&#xff0c;由于其是基于列的數據庫&#xff0c;所以比傳統的數據庫快許多&…

Django中模型類 屬性-學習筆記

定義屬性 Django根據屬性的類型確定以下信息&#xff1a; 當前選擇的數據庫支持字段的類型渲染管理表單時使用的默認html控件在管理站點最低限度的驗證 django會為表創建自動增長的主鍵列&#xff0c;每個模型只能有一個主鍵列&#xff0c;如果使用選項設置某屬性為主鍵列后d…

Angular Redux

Angular Redux 轉載于:https://www.cnblogs.com/skating/p/6185878.html

AtomicInteger相關類

在java6以后我們不但接觸到了Lock相關的鎖&#xff0c;也接觸到了很多更加樂觀的原子修改操作&#xff0c;也就是在修改時我們只需要保證它的那個瞬間是安全的即可&#xff0c;經過相應的包裝后可以再處理對象的并發修改&#xff0c;以及并發中的ABA問題&#xff0c;本文講述At…

Storm入門簡介

目錄前言&#xff1a;1、Storm簡介2、Storm與Hadoop的區別3、Storm核心組件4、Storm編程模型5、流式計算一般架構圖&#xff08;重要&#xff09;總結&#xff1a; 目錄 前言&#xff1a; 在介紹Storm之前&#xff0c;先介紹下離線計算。 離線計算&#xff1a;批量獲取數據…

項目完成

完成示例項目 現在還需要的代碼包括三個方面&#xff0c;三個方面順序不分先后。 1.定義視圖2.定義URLconf3.定義模板 定義視圖 編寫booktest/views.py文件如下&#xff1a; from django.shortcuts import render from booktest.models import BookInfo#首頁&#xff0c;展…

前端模板預編譯技術

什么是前端模板預編譯 前端模板預編譯通過預編譯技術讓前端模板突破瀏覽器限制&#xff0c;實現后端模板一樣的同步“文件”加載能力。它采用目錄來組織維護前端模板&#xff0c;從而讓前端模板實現工程化管理&#xff0c;最終保證前端模板在復雜單頁 web 應用下的可維護性。同…