記錄Python指令碼的執行日誌
一、logging模組
Python中有一個模組logging,可以直接記錄日誌
# 日誌級別 # CRITICAL 50 # ERROR 40 # WARNING 30 # INFO 20 # DEBUG 10
logging.basicConfig()函式中的具體引數:
filename: 指定的檔名建立FiledHandler,這樣日誌會被儲存在指定的檔案中;
filemode: 檔案開啟方式,在指定了filename時使用這個引數,預設值為“w”還可指定為“a”;
format: 指定handler使用的日誌顯示格式;
datefmt: 指定日期時間格式。,格式參考strftime時間格式化(下文)
level: 設定rootlogger的日誌級別
stream: 用指定的stream建立StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者檔案,預設為sys.stderr。
若同時列出了filename和stream兩個引數,則stream引數會被忽略。
format引數中可能用到的格式化資訊:
%(name)s |
Logger的名字 |
%(levelno)s |
數字形式的日誌級別 |
%(levelname)s |
文字形式的日誌級別 |
%(pathname)s |
呼叫日誌輸出函式的模組的完整路徑名,可能沒有 |
%(filename)s |
呼叫日誌輸出函式的模組的檔名 |
%(module)s |
呼叫日誌輸出函式的模組名 |
%(funcName)s |
呼叫日誌輸出函式的函式名 |
%(lineno)d |
呼叫日誌輸出函式的語句所在的程式碼行 |
%(created)f |
當前時間,用UNIX標準的表示時間的浮 點數表示 |
%(relativeCreated)d |
輸出日誌資訊時的,自Logger建立以 來的毫秒數 |
%(asctime)s |
字串形式的當前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒 |
%(thread)d |
執行緒ID。可能沒有 |
%(threadName)s |
執行緒名。可能沒有 |
%(process)d |
程序ID。可能沒有 |
%(message)s |
使用者輸出的訊息 |
二、logging模組測試
1、列印日誌到標準輸出中
import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
輸出結果
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:/pyworkpeace/tupian.py 'https://www.tianyancha.com/login'
WARNING:root:warning message
Process finished with exit code 0
可以看出預設情況下Python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於WARNING級別的日誌。預設的日誌的格式為:
日誌級別:Logger名稱:使用者輸出訊息
2、將日誌檔案輸入到檔案中
import os
logging.basicConfig(filename=os.path.join(os.getcwd(),'log.txt'),level=logging.DEBUG)
logging.debug('this is a message')
執行這三行程式碼後會在安裝Python的目錄中出現一個log.txt檔案,檔案內容
DEBUG:root:this is a message
DEBUG:root:debug message
3、自定義格式,輸出日誌檔案
# -*-coding:utf-8-*-
import logging
def console_out(logFilename):
''''' Output log to file and console '''
# Define a Handler and set a format which output to file
logging.basicConfig(
level=logging.DEBUG, # 定義輸出到檔案的log級別,大於此級別的都被輸出
format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定義輸出log的格式
datefmt='%Y-%m-%d %A %H:%M:%S', # 時間
filename=logFilename, # log檔名
filemode='w') # 寫入模式“w”或“a”
# Define a Handler and set a format which output to console
console = logging.StreamHandler() # 定義console handler
console.setLevel(logging.INFO) # 定義該handler級別
formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s') # 定義該handler格式
console.setFormatter(formatter)
# Create an instance
logging.getLogger().addHandler(console) # 例項化新增handler
# Print information # 輸出日誌級別
logging.debug('logger debug message')
logging.info('logger info message')
logging.warning('logger warning message')
logging.error('logger error message')
logging.critical('logger critical message')
if __name__ == "__main__":
console_out('logging.log')
輸出結果:
此時也會自動生成一個日誌檔案,日誌檔案和執行檔案在同一個資料夾中,檔名logging.log
2017-10-23 Monday 11:37:59 hgghf : DEBUG logger debug message
2017-10-23 Monday 11:37:59 hgghf : INFO logger info message
2017-10-23 Monday 11:37:59 hgghf : WARNING logger warning message
2017-10-23 Monday 11:37:59 hgghf : ERROR logger error message
2017-10-23 Monday 11:37:59 hgghf : CRITICAL logger critical message
修改輸出路徑:
filename='/tmp/test1.log', # log檔名 當將指令碼中這行程式碼換一下,那麼我們輸出日誌的路徑地址就換成了D:\tmp 下面的方式同樣可以達到上述結果
4、自定義輸出位置
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/test.log',
filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
由於執行指令碼放在D:\pyworkpeace\下,輸出檔案在D盤tmp資料夾下test.log,內容如下:
Mon, 23 Oct 2017 15:00:05 tupian.py[line:11] DEBUG debug message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:12] INFO info message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:13] WARNING warning message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:14] ERROR error message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:15] CRITICAL critical message
三、Logger,Handler,Formatter,Filter的概念
相關推薦
記錄Python指令碼的執行日誌
一、logging模組 Python中有一個模組logging,可以直接記錄日誌 # 日誌級別 # CRITICAL 50 # ERROR 40 # WARNING 30 # INFO 20 # DEBUG 10 logging.basicCo
生產級部署 Python 指令碼,日誌收集、崩潰自啟,一鍵搞定
今天介紹一個生產級的流程管理工具 PM2,通常我們說到 PM2 的時候,都是在說如何部署 Node.js 程式,但是實際上 PM2 很強大,不僅僅可以用來管理 Node.js,它還可以用來管理 Python、PHP、Ruby、perl 等等。 這裡就以 Python 舉
利用python指令碼執行tcpdump抓包,支援傳參、併發抓取多個包、檔案迴圈覆蓋抓取
#!/usr/bin/env python # AUTH: [email protected] """ tcpdump -i any -s 0 -w /opt/log/tcpdump/2018-07-19--10-43-30.pcap tcp and
Python 指令碼執行過程
Python是指令碼語言,簡單方便,缺點是執行速度慢,不能對程式碼進行加密,跨平臺,可以在互動式環境下執行也可以在整合環境下執行。Python有兩個版本,但是兩個版本不相容指令碼執行過程1、Python的執行過程在執行Python檔案時,直譯器會先將程式碼進行解釋,解釋後的結
解決Oracle缺少動態連結庫cannot open shared object file: No such file o;解決 Linux中python指令碼執行無問題,配置crontab定時任務報錯
注:該問題的本質是:缺少動態連結庫 20181030更: 在另一臺伺服器再次遇到類似的問題,也是直接執行python指令碼無問題,在crontab中報錯: ImportError: libclntsh.so.11.1: cannot open shared ob
crontab 中 python 指令碼執行失敗的解決方法
寫伺服器程式的免不了要經常和 crontab 打交道,定時執行一些指令碼什麼的。大部分情況下都是 bash 的一些 shell 指令碼,但 shell 我不是很熟悉,於是在很多情況下都直接寫 Python 指令碼來搞定它。今天寫了一個操作 PostgreSQL 資料庫的 P
【mysql資料庫】python指令碼執行SQL語句,關於字串變數的注意事項
轉載一篇網友介紹Python 資料庫的Connection、Cursor兩大物件,寫的非常好。 https://blog.csdn.net/guofeng93/article/details/53994112 最新在使用python操作資料庫,發現使用cursor.exec
【已解決】Python指令碼執行出現語法錯誤:IndentationError: unindent does not match any outer indentation level
原創出處:http://www.crifan.com/python_syntax_error_indentationerror/comment-page-1/ 【問題】 一個python指令碼,本來都執行好好的,然後寫了幾行程式碼,而且也都確保每行都對齊了,但是執行的
python指令碼執行時報ImportError: No module named MySQLdb的處理
一.問題描述 執行py指令碼時,提示ImportError: No module named MySQLdb錯誤,如下: [[email protected] sh]# python 1.py Traceback (most recent call last):
Python指令碼執行Mysql語句遇到死鎖問題
關於執行指令碼出行死鎖問題現象展示 以下是第一次遇到這種問題,本人的分析過程。 a. 初步排查 對每個執行段落進行try....catch捕獲異常,先定位問題出現區域,接著對問題定位發現如下。
在windows下使用python指令碼執行cmd命令
1、python執行cmd命令主要有兩種方式:(1)python的OS模組。 OS模組呼叫CMD命令有兩種方式:os.popen(),os.system(). 都是用當前程序來呼叫。 os.system是無法獲取返回值的。當執行結束後接著往下面執行程式。用法如:OS.sy
Python 指令碼執行時Segmentation fault (core dumped)
問題如題描述,python 執行過程中直接導致python 直譯器崩潰(不是異常,直接崩潰),下面簡敘一下debug過程: google查詢結果顯示這種情況多數是因為Python裡的C擴充套件導致(訪問了非法記憶體區域,可能和C自身記憶體管理機制有關),而且
使用python指令碼執行地理處理工具
桌面ArcGIS包含800多種可在Python指令碼中執行的地理處理工具。 通過Python指令碼來執行地理處理工具,可以處理複雜的工作和執行批處理任務。 案例一:使用指令碼執行地理處理工具(以裁剪為例) 檢視幫助文件模仿的程式碼: 1 #
python對執行程式進行日誌檔案記錄
import logging import psutil import os #設定一個日誌輸出檔案 log_filename="logging.txt" #設定日誌輸出格式 log_format=' [%(asctime)s] %(message)s' i=
Python中字串連線、刪除陣列中指定元素、記錄指令碼執行時間
1、Python中字串連線 a = "I am " b = 20 c = a + '%d'%b '%d'%b將b轉換成為字串格式,”+“對兩個字串進行拼接。 2、刪除陣列中指定元素 Python中陣列的使用:http://blog.163.com/jackylau_v/
Windows下執行python指令碼報錯“ImportError: No Module named ...”的解決方法
之前遇到一個問題,在Pycharm或IPython之類的IDE上執行指令碼正常,但是直接執行或cmd命令列執行的時候報了模組未能找到的 誤——ImportError: No Module named ...。 這是啥情況? Python在啟動直譯器(Interpreter)的時候
python實現AOP日誌記錄
前言 在Java中,AOP程式設計是一件比較通用方法,能夠少寫很多重複性的程式碼,讓程式自動幫我們完成,例如收集錯誤記錄,保證業務的事務性,無措提交,有錯回滾等。 最近寫了較多python程式碼,在python中,使用print 記錄日誌,但是每一個方法都要寫,比較麻煩,並且又不
python指令碼方式每分鐘生成日誌
vi generate.py 程式碼 #coding=UTF-8 import random import time # url url_paths = [ "class/112.html", "class/128.html", "class/145.html
python指令碼批量執行redis寫入操作
#!/usr/bin/python # -*- coding: UTF-8 -*- import os import time redisFile = open("redis.txt", "r") for cmd in redisFile.__iter__(): cmd = cmd.
jenkins執行python指令碼
最新在研究使用jenkins做升級釋出功能,大概的操作是選擇產品、模組、環境等引數後,執行一個python指令碼,指令碼獲取使用者選擇引數,然後執行釋出動作。 jenkins執行python指令碼,需要使用python plugin 具體使用方法: 1、安裝python plugin外掛