在flask框架中,每處理完一條請求,都會在終端列印出一條請求的日誌資訊:
127.0.0.1 - - [31/may/2018 04:40:35] "post /***/***/*** http/1.1" 200 -
之所以列印了這條日誌資訊,是因為flask框架在處理完請求後,呼叫了werkzeug庫的_log函式,函式如下。
def _log(type, message, *args, **kwargs):
"""log into the internal werkzeug logger."""
global _logger
if _logger is none:
import logging
_logger = logging.getlogger('werkzeug')
# only set up a default log handler if the
if not logging.root.handlers and _logger.level == logging.notset:
_logger.setlevel(logging.info)
handler = logging.streamhandler()
_logger.addhandler(handler)
getattr(_logger, type)(message.rstrip(), *args, **kwargs)
如果想要修改列印日誌,可以在啟動flask之前,定義乙個root logger
import logging
logger = logging.getlogger()
file_handler = logging.filehandler('/path/to/log/test.log')
logger.addhandler(file_handler)
logger.setlevel(logging.info)
這麼做之所以能改變flask列印資訊的地方,是因為在_log函式中有個一條判斷:
if not logging.root.handlers and _logger.level == logging.notset
當在**中定義了乙個root logger即呼叫logging.getlogger()不傳名字引數),該條件判斷便不成立,因此,werkzeug中的 _logger = logging.getlogger(『werkzeug』)便不會新增乙個streamhandler處理類。
另外,root logger例項的配置行為會影響帶名字logger例項的行為
logger1 = logging.getlogger() # root logger
logger2 = logging.getlogger('hawk') # hawk logger
file_handler = logging.filehandler('/usr/local/usersystem/user.log')
logger1.addhandler(file_handler)
logger1.setlevel(logging.info)
# 此時,當呼叫logger2時,logger2也會向日誌檔案中寫入內容
基於這個機制,werkzeug中的_logger便會按照你定義的root logger的行為進行寫日誌動作! flex程式列印log日誌,trace資訊
可以列印logger的內容,乙個例子 形成日誌內容 flash player是除錯版的,10.0的除錯不能夠形成flashlog.txt檔案 動態檢視日誌的檔案工具baretail baretail測試工具的優點 flex應用程式通過日誌資訊除錯 trace或者logger資訊 編輯mm.cfg的配...
js中除錯技巧 列印日誌資訊
平常除錯 的時候,大部分情況下我們會採用console.log的形式進行處理.但是這個是非常費事費力的一件事情.因為這個地方是要進行 的修改,然後經過 的 reload 之後,是一件非常低效的事情.而我們程式設計師是不會做低效的事情的 針對自己在工作中的場景,總結了一下幾種比較搞笑的方法進行列印 使...
將執行資訊列印日誌到檔案中
開發程式經常要從控制台當中獲取程式執行的情況,最近在開發在伺服器端,導師要求要記錄好執行資訊,包括異常資訊,客戶連線情況等資訊,但控制台 有種種限制,如視窗過小閱讀不方便,或者在伺服器上通過命令列執行jar包時的行數限制等等。於是就想到將執行資訊列印日誌到檔案中。接下來就分享一下這幾天研究出來的幾種...