Python常用模組(二)

來源:互聯網
上載者:User

標籤:分析日誌   檔案中   tin   日誌格式   讀取   load   傳遞   warning   ctime   

一.json與pickle

  json與pickle模組是為了完成資料的序列化.

  序列化是指把對象(變數)從記憶體中變成可儲存或傳輸的過程,在Python中叫picking,在其他語言中也由其他的叫法,但是都是一個意思

  序列化是為瞭解決資料持久儲存狀態和跨平台資料互動兩個問題,

  如何?序列化?

  json

  JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的資料交換格式。它基於 ECMAScript (歐洲電腦協會制定的js規範)的一個子集,採用完全獨立於程式設計語言的文字格式設定來儲存和表示資料。簡潔和清晰的階層使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和產生,並有效地提升網路傳輸效率。

  如果我們要在不同的程式設計語言之間傳遞對象,就必須把對象序列化為標準格式,最好的方法是序列化為json,因為json表示出來就是一個字串,可以被所有語言讀取,也可以方便地儲存到磁碟或者通過網路傳輸,json不僅是標準格式,平且比XML更快,而且可以直接在Web頁面讀取,非常方便

  由於json表示的對象就是標準的JavaScript語言的對象,json和python內建的資料類型如下:

  

  pickle

  pickle和json一樣是為了實現序列化的模組,但是pickle的問題是只能在python中使用,python中幾乎所有的資料類型都可以用pickle來序列化,但是pickle序列化後的資料可讀性差,人一般無法識別.

  pickle.dump(obj, file[, protocol])
  序列化對象,並將結果資料流寫入到檔案對象中。參數protocol是序列化模式,預設值為0,表示以文本的形式序列化。protocol的值還可以是1或2,表示以二進位的形式序列化。

  pickle.load(file)
  還原序列化對象。將檔案中的資料解析為一個Python對象。其中要注意的是,在load(file)的時候,要讓python能夠找到類的定義,否則會報錯:

二.logging模組

  1.日誌相關概念

  日誌是一種可以追蹤某些軟體運行時所發生事件的方法。軟體開發人員可以向他們的代碼中調用日誌記錄相關的方法來表明發生了某些事情。一個事件可以用一個可包含可選變數資料的訊息來描述。此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性層級(level)。

  日誌是為了使我們通過記錄和分析日誌可以瞭解一個系統或軟體程式運行情況是否正常,也可以在應用程式出現故障時快速定位問題.

  2.日誌的層級

    CRITICAL = 50

    ERROR = 40

    WARNING = 30

    INFO = 20

    DEBUG = 10

    NOTSET = 0

  預設層級為warning

  代碼執行個體:

    

  執行結果:

    

  3.logging模組的使用

    logging模組定義的模組層級別的常用函數:

     logging.debug(msg,*args,**kwargs)      建立一條層級為DEBUG的日誌記錄

     logging.info(msg,*args,**kwargs)          建立一條層級為INFO的日誌記錄

logging.warning(msg,*args,**kwargs)    建立一條層級為WARNING的日誌記錄

logging.error(msg,*args,**kwargs)        建立一條層級為ERROR的日誌記錄

logging.critical(msg,*args,**kwargs)      建立一條層級為CRITICAL的日誌記錄

logging.log(level,*args,**kwargs)          建立一條層級為level的日誌記錄

logging.basicConfig(**kwargs)              對root logger進行一次性配置

4.logging模組的Formatter,Handler,Logger,Filter對象

  logger:產生日誌的對象
  Filter:過濾日誌的對象
  Handler:接收日誌然後控制列印到不同的地方,FileHandler用來列印到檔案中,StreamHandler用來列印到終端
  Formatter對象:可以定製不同的日誌格式對象,然後綁定給不同的Handler對象使用,以此來控制不同的Handler的日誌格式

  logger是第一級過濾,然後才能到handler,我們可以給logger和handler同時設定level

  logging配置,代碼執行個體:

  LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘formatters‘: {
      ‘standard‘: {
        ‘format‘: ‘[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]‘
          ‘[%(levelname)s][%(message)s]‘
      },
      ‘simple‘: {
        ‘format‘: ‘[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s‘
      },
      ‘collect‘: {
        ‘format‘: ‘%(message)s‘
      }
    },
    ‘filters‘: {
      ‘require_debug_true‘: {
        ‘()‘: ‘django.utils.log.RequireDebugTrue‘,
      },
    },
    ‘handlers‘: {
      #列印到終端的日誌
      ‘console‘: {
        ‘level‘: ‘DEBUG‘,
        ‘filters‘: [‘require_debug_true‘],
        ‘class‘: ‘logging.StreamHandler‘,
        ‘formatter‘: ‘simple‘
      },
      #列印到檔案的日誌,收集info及以上的日誌
      ‘default‘: {
        ‘level‘: ‘INFO‘,
        ‘class‘: ‘logging.handlers.RotatingFileHandler‘, # 儲存到檔案,自動切
        ‘filename‘: os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 記錄檔
        ‘maxBytes‘: 1024 * 1024 * 5, # 日誌大小 5M
        ‘backupCount‘: 3,
        ‘formatter‘: ‘standard‘,
        ‘encoding‘: ‘utf-8‘,
      },
      #列印到檔案的日誌:收集錯誤及以上的日誌
      ‘error‘: {
        ‘level‘: ‘ERROR‘,
        ‘class‘: ‘logging.handlers.RotatingFileHandler‘, # 儲存到檔案,自動切
        ‘filename‘: os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 記錄檔
        ‘maxBytes‘: 1024 * 1024 * 5, # 日誌大小 5M
        ‘backupCount‘: 5,
        ‘formatter‘: ‘standard‘,
        ‘encoding‘: ‘utf-8‘,
      },
      #列印到檔案的日誌
      ‘collect‘: {
        ‘level‘: ‘INFO‘,
        ‘class‘: ‘logging.handlers.RotatingFileHandler‘, # 儲存到檔案,自動切
        ‘filename‘: os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
        ‘maxBytes‘: 1024 * 1024 * 5, # 日誌大小 5M
        ‘backupCount‘: 5,
        ‘formatter‘: ‘collect‘,
        ‘encoding‘: "utf-8"
      }
    },
    ‘loggers‘: {
      #logging.getLogger(__name__)拿到的logger配置
      ‘‘: {
        ‘handlers‘: [‘default‘, ‘console‘, ‘error‘],
        ‘level‘: ‘DEBUG‘,
        ‘propagate‘: True,
      },
      #logging.getLogger(‘collect‘)拿到的logger配置
      ‘collect‘: {
        ‘handlers‘: [‘console‘, ‘collect‘],
        ‘level‘: ‘INFO‘,
      }
    },
  }

Python常用模組(二)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.