Trình định dạng tùy chỉnh ghi nhật ký python

Mã nguồn trong bài viết này được tổng hợp từ nhiều nguồn khác nhau kết hợp với mã của cá nhân, đối với mã được tổng hợp về việc các bạn có thể tham khảo nguồn ở đường liên kết chú thích trong mã hoặc tham khảo liên kết ở cuối bài viết

Thói quen của mình và cũng có thể là thói quen của nhiều người lúc mới học Python cũng như khi viết những script nhỏ để lấy thông tin chương trình lúc runtime đó là sử dụng

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
7,
# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
7 ở bất cứ đâu và bất cứ khi nào. Thường thì chương trình sẽ có nhiều lệnh in như thế này

try:
    print["Find PID in current url"]
    wait.until[lambda mydriver: "{}".format[PID] in mydriver.current_url]
except:
    print["Could not find PID in url"]
    print["Current url: {}".format[mydriver.current_url]]
    mydriver.find_element_by_xpath['//select[@id="aex-view-3"]/option[text[]="Vietnam"]'].click[]
    mydriver.find_element_by_xpath['//button[@id="create-profile-submit-btn"]'].click[]

Tuy nhiên, khi chương trình lớn dần lên, một vấn đề khá đau đầu khi sinh ra đó là thông tin được in ra khá điên loạn, không được phân loại, mất thời gian xác định cũng như giảm hiệu suất của chương trình. Hàm in mặc định sẽ xuất nội dung ra

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
9 và nội dung đăng nhập ra thường rất hay bị nhầm lẫn với dữ liệu khác

Giải pháp mình muốn giới thiệu trong bài viết này đó là sử dụng ghi nhật ký mô-đun. Đây là mô-đun tiêu chuẩn [được đóng gói kèm theo bộ cài đặt mặc định] giúp Python phát triển cộng đồng, dễ dàng sử dụng và cực kỳ linh hoạt. Logging cung cấp cho lập trình viên những tiện ích như

  • Phân chia cấp độ cho các thông báo lỗi, cho phép tùy chọn mức độ quan trọng của các thông báo, cho phép hoặc không cho phép hiển thị một thông báo đã được phân loại
  • Cho phép đầu ra cấu hình của thông báo lỗi nằm trên bảng điều khiển hoặc tệp hoặc nguồn khác

Lập trình viên có thể chọn các mức độ sau khi viết nhật ký nội dung, các bảng liệt kê được liệt kê có mức độ quan trọng lớn dần

MứcNội dungDEBUGThông tin chi tiết, thường là thông tin để tìm lỗiINFOThông báo thông thường, các thông tin ra khi chương trình chạy theo đúng kịch bảnCẢNH BÁOThông báo khi sự cố bất thường hoặc lỗi có thể xảy ra, tuy nhiên chương trình vẫn có thể

Use module logging cơ bản

Ví dụ đơn giản nhất khi sử dụng ghi nhật ký

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả

Mặc định, mức thông báo sẽ được đặt ở mức

import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
0. Các thông báo có mức dưới đây [
import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
1,
import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
2] vì như vậy sẽ không được đưa ra. Để thay đổi mức độ này, bạn chỉ cần thiết lập lại thông số mức ghi nhật ký như sau

import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console

You can also log ra file

import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']

Nội dung in ra sẽ tương tự như khi bạn ra bảng điều khiển

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
0

Cần lưu ý là nhật ký nội dung mới sẽ ghi kết nối tiếp vào cùng 1 tệp với nhật ký nội dung cũ [lần chạy trước đó], trong trường hợp nội dung cũ không còn quan trọng nữa, có thể thiết lập để ghi nhật ký luôn tạo nhật ký mới bằng

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
2

Một ví dụ phức tạp hơn về việc sử dụng hỗn hợp các log với các mức độ khác nhau

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
3

Log ra nhiều nguồn cùng lúc

Việc sử dụng logger cơ bản chỉ cho phép chúng ta đăng nhập ra một nguồn tại một thời điểm, trong ví dụ trên, khi đặt

import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
4 thì giao diện điều khiển sẽ không ghi nhật ký vào nội dung nữa. Một cách cho phép lập trình viên thực hiện công việc trong nhật ký ra nhiều nguồn khác nhau, đó là sử dụng
import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
5, tham khảo ví dụ trong nhật ký ra
import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
6 sau

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
7

Đoạn mã trên sẽ tạo nhật ký tệp và trong nội dung đăng nhập vào tệp tương tự như việc bổ sung cấu hình

import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
7, để trong bảng điều khiển đồng thời, bạn thêm
import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
8 như sau

try:
    print["Find PID in current url"]
    wait.until[lambda mydriver: "{}".format[PID] in mydriver.current_url]
except:
    print["Could not find PID in url"]
    print["Current url: {}".format[mydriver.current_url]]
    mydriver.find_element_by_xpath['//select[@id="aex-view-3"]/option[text[]="Vietnam"]'].click[]
    mydriver.find_element_by_xpath['//button[@id="create-profile-submit-btn"]'].click[]
0

Ngoài

import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
6 và
import logging
logging.basicConfig[level=logging.DEBUG]
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # sẽ in ra warning trên console
8, ghi nhật ký còn hỗ trợ rất nhiều xử lý khác nữa. Chi tiết ở đây

Trong biến nội dung

Để trong biến nội dung, bạn chỉ cần đưa định dạng chuỗi vào sau đó truyền các biến tương ứng với định dạng trong đối số. Xem ví dụ sau để hiểu rõ hơn

try:
    print["Find PID in current url"]
    wait.until[lambda mydriver: "{}".format[PID] in mydriver.current_url]
except:
    print["Could not find PID in url"]
    print["Current url: {}".format[mydriver.current_url]]
    mydriver.find_element_by_xpath['//select[@id="aex-view-3"]/option[text[]="Vietnam"]'].click[]
    mydriver.find_element_by_xpath['//button[@id="create-profile-submit-btn"]'].click[]
3

Chú ý là bạn không cần định dạng chuỗi trước khi truyền vào hàm

import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']
1 vì
import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']
2 sẽ tự làm công việc này. Có nghĩa là công việc bạn viết.
import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']
3 hoàn toàn thừa

Định dạng nội dung và thêm các thông tin chi tiết về nhật ký

Logging cho phép thêm các thông tin chi tiết hơn về chương trình khi gọi log as. Vị trí gọi log [dòng mã], tên module gọi log, file đang chạy

A full config could as after

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
0

In the information will like after

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
1

Việc phân loại chi tiết như trên rất hữu ích khi bạn phải phân tích các tệp nhật ký dài, khi đó bạn có thể sử dụng các chương trình soạn thảo mã để lọc hoặc tìm kiếm các thông tin tương ứng một cách nhanh chóng

Ghi nhật ký trong ngoại lệ [trong thông tin Traceback]

Việc ghi nhật ký ra khi có ngoại lệ là rất cần thiết, tuy nhiên ghi nhật ký ra mà không có thông tin chi tiết về ngoại lệ đó thì không có ý nghĩa lắm. Để bổ xung thông tin khi bắt được ngoại lệ, chúng ta chỉ cần thêm cấu hình

import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']
4

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
2

In ra

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
3

You can also call

import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']
5, have the function in tương đương với
import logging
logging.basicConfig[filename='example.log',level=logging.DEBUG]
logging.debug['This message should go to the log file']
logging.info['So should this']
logging.warning['And this, too']
6

Sử dụng ghi nhật ký trong nhiều mô-đun

Nếu phần mềm của bạn có nhiều mô-đun thì đây là một cách đơn giản để thiết lập hệ thống ghi nhật ký xuyên suốt cả phần mềm

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
4

Trong module

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
5

Kết quả

# source: //docs.python.org/3.6/howto/logging.html#a-simple-example
import logging
logging.warning['Watch out!']  # sẽ in ra warning trên console
logging.info['I told you so']  # không in gì cả
6

Kết hợp với định dạng công việc ghi nhật ký nội dung như đã nêu trước đó, bạn có thể vào thông tin nhật ký được gọi từ mô-đun nào

Trên đây là mô tả một số ví dụ đơn giản về việc sử dụng ghi nhật ký, bạn có thể khám phá thêm một số tính năng phức tạp hơn của việc ghi nhật ký ở đó.

Chủ Đề