日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

我给这个Python库打101分!

發布時間:2024/9/15 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我给这个Python库打101分! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

日志在開發過程中是一種被很多程序員不重視,但是卻至關重要的一項功能。

我認為在一個系統的整個生命周期里,日志系統雖然工作量不大,但是論重要性程度能夠占10%-15%的比重,或者更高。

優秀的日志管理,至少能夠從3個方面提升系統:

  • 調試速度

  • 執行效率

  • 運維效率

很少有人敢確保一個系統開發完成之后不會出現任何問題,因此,在一個完善的商業化系統設計過程中,日志管理都會被視為一個重要模塊。

日志輸出、Kafka日志訂閱、日志分析,完備的日志管理能夠在系統出現問題時,維護人員需要明確4個問題:

  • 問題是什么?

  • 問題出在哪?

  • 什么時間出現的問題?

  • 為什么出現問題?

然后,快速定位、快速恢復系統正常運行。要清楚的是,系統正式上線之后,恢復系統時間每多耗費1分鐘,它帶來的資損和負面影響都是無法估量的。

而在Python中,提到日志管理每個大多數Python開發者都會脫口而出logging。

logging是Python內置的標準庫,也是使用頻率較高的日志管理Python庫,但是它有著一些明顯的缺點:

  • 功能單一

  • 執行效率低

  • 需要手動配置

Python內置的標準logging庫默認配置輸出的日志內容非常簡單,沒有時間、位置這些在日志管理過程中至關重要的信息,每一次使用都需要自己手動配置一下,這樣會帶來冗余的代碼和工作量。

為了解決這些問題,本文就來介紹一款可以很好替代標準logging庫的第三方日志管理庫--Eliot

Eliot

前面已經提到,一個優秀的日志管理系統至少要回答4個問題:

  • 問題是什么?

  • 問題出在哪?

  • 什么時間出現的問題?

  • 為什么出現問題?

但是,大多數日志庫都不具備這樣的功能。而本文介紹的Eliot恰好都能滿足這些需求。

除了能夠回答上述問題,告訴你問題是什么、問題出在哪、為什么出現問題,Eliot還具有很多其他特性:

  • 結構化輸出日志信息,能夠對輸出一目了然

  • 可以用于解析和過濾日志

  • 不僅記錄簡單信息,還可以追蹤程序的執行過程

  • 性能非常好,使用非堵塞IO

  • 可以結合Logstash/Elasticsearch使用

下面就來看一下Eliot的基本使用,更加豐富的功能,各位同學可以閱讀一下文檔仔細了解一下Eliot的使用。

安裝

可以使用pip安裝,

$?pip?install?eliot?eliot-tree

也可以使用conda安裝,

$?conda?install?-c?conda-forge?eliot?eliot-tree

安裝的eliot用于日志的生成、輸出、分析等功能,eliot-tree可以實現以樹結構可視化日志信息。

使用

首先給出一段示例代碼,

import?requests from?eliot?import?start_action,?to_file#?1.?to_file to_file(open("linkcheck.log",?"w"))def?check_links(urls):with?start_action(action_type="check_links",?urls=urls):for?url?in?urls:try:#?2.?start_actionwith?start_action(action_type="download",?url=url):response?=?requests.get(url)response.raise_for_status()except?Exception?as?e:raise?ValueError(str(e))try:check_links(["http://eliot.readthedocs.io",?"http://nosuchurl"]) except?ValueError:print("Not?all?links?were?valid.")

在這段代碼中有2處用到了Eliot:

  • to_file:用于指定輸出日志文件;

  • start_action:用于創建動作,如果動作成功則輸出succeed ,否則拋出異常;

  • 然后再命令行下執行代碼:

    $?python?linkcheck.py

    這時候會發現生成了一個名為linkcheck.log的日志文件。

    但是,當用文本編輯器打開的時候會發現,日志的格式很單一、并沒有樹結構的信息。

    如果想以樹結構的方式可視化輸出信息,就需要用到eliot-tree這個工具。

    $ eliot-tree linkcheck.log b1cb58cf-2c2f-45c0-92b2-838ac00b20cc └── check_links/1 ? started├── timestamp: 2017-10-27 20:42:47.206684├── urls:│ ├── 0: http://eliot.readthedocs.io│ └── 1: http://nosuchurl├── download/2/1 ? started│ ├── timestamp: 2017-10-27 20:42:47.206933│ ├── url: http://eliot.readthedocs.io│ └── download/2/2 ? succeeded│ └── timestamp: 2017-10-27 20:42:47.439203├── download/3/1 ? started│ ├── timestamp: 2017-10-27 20:42:47.439412│ ├── url: http://nosuchurl│ └── download/3/2 ? failed│ ├── errno: None│ ├── exception: requests.exceptions.ConnectionError│ ├── reason: HTTPConnectionPool(host='nosuchurl', port=80): Max retries exceeded with url: / (Caused by NewConnec…│ └── timestamp: 2017-10-27 20:42:47.457133└── check_links/4 ? failed├── exception: builtins.ValueError├── reason: HTTPConnectionPool(host='nosuchurl', port=80): Max retries exceeded with url: / (Caused by NewConnec…└── timestamp: 2017-10-27 20:42:47.457332

    在這個結構化的日志信息中,可以一目了然的看出3個方面的信息:

    • 哪些動作成功了,哪些動作失敗了;

    • 失敗的動作會記錄異常

    • 日志追蹤并記錄了執行的詳細動作

    另外,執行每一步的詳細時間戳也被記錄在日志中。

    除了在日志生成和輸出增強日志管理之外,Eliot還在日志分析方面也提供了很不錯的解決方案。

    在以往,系統運行很長時間之后會產生大量的日志,通過肉眼逐行去看、或者手動搜索關鍵字的方式都不顯示,從零開始開發一款日志分析系統耗費成本也較高。

    Eliot針對日志分析加入了2項非常實用的功能:

    • 過濾

    • 解析

    通過這2項功能,就不需要再去寫一個復雜的邏輯去處理日志文件、解析對應的行和關鍵字。在Eliot中,只需要簡短的代碼就可以實現日志的定位和解析。除此之外,Eliot轉為json輸出而設計,可以結合Elasticsearch使用,簡歷搜索索引,能夠通過自建的搜索引擎快速搜索到想要的日志信息。

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的我给这个Python库打101分!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。