
Gỡ lỗi bằng log có cấu trúc: module logging ghi ra file, mức DEBUG/INFO/ERROR và xoay vòng file
#Python#Log#Gỡ lỗi1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
In ra Listing Window là cách gỡ lỗi tạm thời. Với công cụ dùng lâu dài cần log thật sự: có mức độ, thời gian, tên module và tự xoay vòng để không đầy ổ đĩa.
Gỡ lỗi bằng log có cấu trúcCác bước thực hiện
- Cấu hình logging. Một hàm thiết lập dùng chung.
- Chọn mức. DEBUG khi gỡ lỗi, INFO khi chạy thường.
- Xoay vòng file. RotatingFileHandler giới hạn dung lượng.
- Ghi ngoại lệ. logger.exception ghi cả traceback.
- Ghi cả ra Listing Window. Handler thứ hai tùy chọn.
Code tham khảo (Python)
import logging import logging.handlers import os import NXOpen class DanhChoListing(logging.Handler): """Handler đưa log vào Listing Window của NX.""" def emit(self, record): try: lw = NXOpen.Session.GetSession().ListingWindow lw.Open() lw.WriteLine(self.format(record)) except Exception: pass def cau_hinh_log(ten="nxlab", thu_muc="D:/NXLab_log", muc=logging.INFO): logger = logging.getLogger(ten) if logger.handlers: # tránh gắn handler lặp khi chạy lại trong cùng phiên return logger os.makedirs(thu_muc, exist_ok=True) logger.setLevel(muc) dinh_dang = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s") file_log = logging.handlers.RotatingFileHandler( os.path.join(thu_muc, ten + ".log"), maxBytes=1000000, backupCount=5, encoding="utf-8") file_log.setFormatter(dinh_dang) logger.addHandler(file_log) man_hinh = DanhChoListing() man_hinh.setFormatter(logging.Formatter("[%(levelname)s] %(message)s")) logger.addHandler(man_hinh) return logger def main(): log = cau_hinh_log(muc=logging.DEBUG) log.info("Bắt đầu") try: part = NXOpen.Session.GetSession().Parts.Work log.debug("Work Part: %s", part.Leaf if part else None) 1 / 0 # lỗi cố ý để xem traceback except Exception: log.exception("Có lỗi khi xử lý") log.info("Kết thúc") if __name__ == "__main__": main()Giải thích code
- Kiểm tra
logger.handlersrất quan trọng: NX giữ module trong bộ nhớ nên chạy lại script sẽ gắn thêm handler và log bị nhân đôi. RotatingFileHandlergiữ tối đa 5 file x 1 MB; file cũ tự bị xoay.log.exception(...)ghi cả traceback, thông tin quý nhất khi người dùng báo lỗi.
Lỗi thường gặp
- Một số tính năng Python mới (f-string, gạch dưới trong số) cần phiên bản Python mà bản NX của bạn có thể chưa hỗ trợ; kiểm tra
platform.python_version(). - Đường dẫn log nên cho phép ghi với mọi người dùng; thư mục mạng chỉ đọc làm handler lỗi.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.