NX Lab

In kết quả bằng Listing Window và ghi log ra file văn bản để tra lỗi sau

#Python#Log4 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Listing Window tiện khi chạy tay, nhưng với script chạy nền hoặc chạy cho cả thư mục bạn cần log ra file. Bài này dựng một lớp ghi log nhỏ dùng được cho mọi script.

    In kết quả bằng Listing Window và ghi log… In kết quả bằng Listing Window và ghi log…

    Các bước thực hiện

    1. Mở Listing Window. Gọi Open() một lần ở đầu script.
    2. Tạo hàm log chung. Một hàm nhận chuỗi, ghi vào cả cửa sổ và file.
    3. Gắn mốc thời gian. Thêm giờ vào mỗi dòng để biết bước nào chạy lâu.
    4. Ghi mức độ. Phân biệt INFO, CANH BAO, LOI để lọc nhanh.
    5. Đóng file cẩn thận. Dùng with hoặc finally để không mất dòng cuối.

    Code tham khảo (Python)

    import os
    import time
    import NXOpen
    
    class Logger:
        """Ghi đồng thời vào Listing Window và file log."""
        def __init__(self, duong_dan_log):
            self.lw = NXOpen.Session.GetSession().ListingWindow
            self.lw.Open()
            os.makedirs(os.path.dirname(duong_dan_log), exist_ok=True)
            self.f = open(duong_dan_log, "a", encoding="utf-8")
    
        def _ghi(self, muc, msg):
            dong = "%s [%s] %s" % (time.strftime("%Y-%m-%d %H:%M:%S"), muc, msg)
            self.lw.WriteLine(dong)
            self.f.write(dong + "\n")
            self.f.flush()
    
        def info(self, msg): self._ghi("INFO", msg)
        def warn(self, msg): self._ghi("CANH BAO", msg)
        def loi(self, msg): self._ghi("LOI", msg)
        def close(self): self.f.close()
    
    def main():
        log = Logger("D:/NXLab_log/chay.log")
        try:
            part = NXOpen.Session.GetSession().Parts.Work
            log.info("Bắt đầu, part = " + (part.Leaf if part else "None"))
            if part is None:
                log.warn("Không có Work Part")
        except Exception as ex:
            log.loi(str(ex))
        finally:
            log.close()
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • encoding="utf-8" giữ đúng tiếng Việt có dấu trong file log.
    • flush() sau mỗi dòng đảm bảo log còn đủ nếu NX bị treo giữa chừng.
    • Mở file ở chế độ "a" (append) để các lần chạy sau nối tiếp nhau.

    Lỗi thường gặp

    • Thư mục log không tồn tại sẽ làm open báo lỗi; luôn makedirs trước.
    • Ghi log quá chi tiết trong vòng lặp hàng nghìn phần tử làm script chậm rõ rệt.

    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.