Hướng dẫn how to append log file in python - cách nối tệp nhật ký trong python

Có hai tệp có tên File1 và File2 trong dự án Python.

Trong file1.py, iam chụp nhật ký vào tệp 'sample.log' và thực thi file2.py thông qua lệnh os.system (). Trong File2.py, tôi đang mở mẫu nhật ký mẫu.log ở chế độ nối thêm và gửi nhật ký đến tệp đó.

Tôi đã thực thi file1.py, mặc dù tôi đã mở tệp nhật ký (file2.py) ở chế độ phụ lục, tôi không thể xem nhật ký File2.py. Nội dung File2 được ghi đè bởi Nội dung File1.

Làm cách nào tôi có thể nối các bản ghi File2.py với nhật ký File1.Py trong sample.log?

file1.py

import logging
import os

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'w',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

logging.debug("Starting of the file1")

os.system("python file2.py")

for i in range(0,2):
    logging.debug("Iam in file1")

file2.py:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")

Cần đầu ra như thế này

03/06/2015 08:02:03 PM - Gỡ lỗi: Bắt đầu tập tin1

03/06/2015 08:02:03 PM - Gỡ lỗi: IAM trong File2

03/06/2015 08:02:03 PM - Gỡ lỗi: IAM trong File2

03/06/2015 08:02:03 PM - Gỡ lỗi: IAM trong File1

03/06/2015 08:02:03 PM - Gỡ lỗi: IAM trong File1

Nhưng nhận được như thế này:

03/06/2015 08:02:49 PM - Gỡ lỗi: Bắt đầu tập tin1

03/06/2015 08:02:49 PM - Gỡ lỗi: IAM trong File1

03/06/2015 08:02:49 PM - Gỡ lỗi: IAM trong File1

Ai đó có thể giúp đỡ trong việc này để có được sản lượng mong đợi của tôi, cảm ơn trước

Hướng dẫn how to append log file in python - cách nối tệp nhật ký trong python
Đăng nhập tin nhắn vào một tệp trong Python. Thiết kế hình ảnh bởi & NBSP; Elias Ervast

Có một mô-đun tích hợp có tên

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
8 để tạo tệp nhật ký trong Python.

Để đăng nhập một thông báo vào một tệp văn bản riêng biệt bằng cách định cấu hình bộ ghi nhật ký root mô -đun

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
8 và đăng nhập thông báo gỡ lỗi:

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")

Do đó, bạn thấy một tệp có tên

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
0 trong cùng một thư mục với chương trình của bạn. Tệp này sẽ có một thông báo trông như thế này:

DEBUG:root:Debug logging test...

Trong Python, bạn có thể đăng nhập thông tin về các vấn đề trong một tệp riêng biệt. Tệp này sau này có thể giúp bạn chẩn đoán các vấn đề. Nó để lại một dấu vết của vụn bánh mì dẫn đến nguồn gốc của vấn đề.

Trong hướng dẫn toàn diện này, bạn học cách làm việc với mô -đun

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
8 và cách thiết lập một bộ ghi.

Đăng nhập Python - một tour du lịch chi tiết

Hãy cùng thực hiện một chuyến tham quan chi tiết hơn về đăng nhập và đăng nhập các tệp trong Python.

Ghi nhật ký có nghĩa là theo dõi các sự kiện và trạng thái ứng dụng của bạn khi nó chạy. Đó là một phương pháp quan trọng để phát triển, gỡ lỗi và chạy phần mềm.

Nếu bạn không theo dõi bất kỳ nhật ký nào của chương trình, rất có thể bạn không thể chẩn đoán các vấn đề đúng cách. Điều này là do không đăng nhập, không có dấu vết nào dẫn đến nguyên nhân gốc có thể của một vấn đề.

Với việc đăng nhập thích hợp được thiết lập, bạn có thể theo dấu vết của bánh mì đến nguồn gốc của một vấn đề.

Tại sao không in

Mặc dù in là một chiến lược tuyệt vời để gỡ lỗi mã, nhưng nó có thể không phải lúc nào cũng là lựa chọn tốt nhất. Điều này đặc biệt đúng khi chương trình phức tạp hơn.

Vấn đề với in là các bản in không được lưu trữ ở bất cứ đâu. Nếu ứng dụng của bạn có lỗi, không có dấu vết của lỗi đó, trừ khi thông báo lỗi được ghi lại ở đâu đó.

Vì vậy, bạn có thể muốn đăng nhập dữ liệu của chương trình trong một tệp nhật ký riêng.

Trong Python, có một thư viện tích hợp có tên

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
8 cho mục đích này.

Cách bắt đầu ghi nhật ký tin nhắn trong Python

Để bắt đầu đăng nhập tin nhắn vào một tệp, bạn cần biết cách thiết lập logger.

Để làm điều này, bạn cần

  1. Nhập mô -đun
    import logging
    
    logFile = 'sample.log'
    logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                         datefmt = '%m/%d/%Y %I:%M:%S %p' )
    
    for i in range(0,2):
       logging.debug("Iam in file2")
    
    8
  2. Định cấu hình logger bằng phương thức
    import logging
    
    logging.basicConfig(filename="log.txt", level=logging.DEBUG)
    logging.debug("Debug logging test...")
    4. Phần còn lại của các bước mô tả làm thế nào.
  3. Chỉ định tệp mà tin nhắn nhật ký được gửi.
  4. Xác định mức độ nghiêm trọng của người Viking của các tin nhắn nhật ký.
  5. Định dạng các thông báo nhật ký.
  6. Nối hoặc ghi đè các tin nhắn nhật ký trước đó trong tệp.

Hãy để bắt đầu xây dựng một logger trong khi trải qua sáu bước này một cách chi tiết.

1. Nhập mô-đun đăng nhập tích hợp Python,

Để sử dụng chức năng ghi nhật ký tích hợp Python, hãy bắt đầu bằng cách nhập mô-đun ghi nhật ký.

import logging

2. Gọi BasicConfig () để bắt đầu định cấu hình logger.

Để bắt đầu đăng nhập tin nhắn vào một tệp trong Python, bạn cần định cấu hình mô -đun

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
8.

Để định cấu hình mô -đun ghi nhật ký, hãy gọi

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
6:

import logging

logging.basicConfig()

Một cuộc gọi

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
4 trống không có gì hữu ích. Trong các bước sau, bạn sẽ thêm các tham số vào cuộc gọi này để thực sự định cấu hình logger.

3. Đăng nhập tệp đích trong Python

Phương thức

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
4 chấp nhận một tham số gọi là
import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
9. Đây là một chuỗi chỉ định tệp đích cho thông báo nhật ký.

Ví dụ: hãy để bắt đầu đăng nhập các tin nhắn vào một tệp có tên là

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
0.

import logging

logging.basicConfig(filename="log.txt")

Bây giờ logger biết tệp đích và có thể bắt đầu ghi nhật ký tin nhắn vào đó.

Nhưng trước khi chúng tôi đăng nhập tin nhắn đầu tiên của mình, chúng tôi cần chỉ định mức độ nghiêm trọng của các tin nhắn mà chúng tôi muốn theo dõi.

Hãy cùng xem các cấp độ tin nhắn nhật ký trong Python.

4. Các cấp tin nhắn đăng nhập

Có năm cấp độ chính của tin nhắn gỡ lỗi khi đăng nhập. Những cấp độ này mô tả sự nghiêm trọng của người Viking về vấn đề này.

Các cấp độ tin nhắn là:

  1. DEBUG:root:Debug logging test...
    1. Được sử dụng để cung cấp thông tin chi tiết. Mức này chủ yếu được sử dụng để chẩn đoán các vấn đề trong mã.
    Used to give detailed information. This level is mostly used for diagnosing issues in code.
  2. DEBUG:root:Debug logging test...
    2. Xác nhận chương trình hoạt động như mong đợi.
    Confirms the program works as expected.
  3. DEBUG:root:Debug logging test...
    3. Một dấu hiệu cho thấy một sự kiện bất ngờ xảy ra hoặc có thể xảy ra.
    An indication that an unexpected event occured or may occur.
  4. DEBUG:root:Debug logging test...
    4. Vấn đề nghiêm trọng. Chỉ ra rằng một chương trình không thể thực hiện một số hành động do lỗi.
    Serious issue. Indicates that a program was unable to perform some action due to an error.
  5. DEBUG:root:Debug logging test...
    5. Một lỗi nghiêm trọng. Chỉ ra rằng chương trình có thể không thể tiếp tục chạy.
    . A serious error. Indicates that the program may be unable to continue running.

Các cấp độ khai thác là số nguyên đằng sau hậu trường. Đây là một cái bàn

Mức độGiá trị số
DEBUG:root:Debug logging test...
5
50
DEBUG:root:Debug logging test...
4
40
DEBUG:root:Debug logging test...
3
30
DEBUG:root:Debug logging test...
2
20
DEBUG:root:Debug logging test...
1
10
Mức ghi nhật ký theo mô -đun ghi nhật ký.

Khi bạn chỉ định mức ghi nhật ký, chương trình đã ghi các tin nhắn từ mức đó trở lên.

Ví dụ: nếu bạn sử dụng

import logging
1, chỉ các tin nhắn của cấp độ
DEBUG:root:Debug logging test...
3,
DEBUG:root:Debug logging test...
4,
DEBUG:root:Debug logging test...
5 mới được ghi lại.

Để đăng nhập một thông báo ở một cấp độ cụ thể, hãy sử dụng các phương thức ghi nhật ký tích hợp tương ứng với các mức được chỉ định ở trên.

Dưới đây là các phương pháp ghi nhật ký:

  • import logging
    5. Đăng nhập một tin nhắn ở cấp độ
    DEBUG:root:Debug logging test...
    1.
  • import logging
    7. Đăng nhập một tin nhắn ở cấp độ
    DEBUG:root:Debug logging test...
    2.
  • import logging
    9. Đăng nhập một tin nhắn ở cấp độ
    DEBUG:root:Debug logging test...
    3.
  • import logging
    
    logging.basicConfig()
    1. Đăng nhập một tin nhắn ở cấp độ
    DEBUG:root:Debug logging test...
    4.
  • import logging
    
    logging.basicConfig()
    3. Đăng nhập một tin nhắn ở cấp độ
    DEBUG:root:Debug logging test...
    5.

Hãy để quay trở lại để định cấu hình logger của chúng tôi. Hãy để chỉ định mức tin nhắn là gỡ lỗi để ghi lại tất cả các tin nhắn có thể vào tệp:

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)

Bây giờ bạn có thể đăng nhập tin nhắn đầu tiên của mình vào tệp

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
0. Để thực hiện việc này, hãy thêm dòng sau sau cuộc gọi
import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
4:

logging.debug("Debug logging test...")

Sau đó, chạy chương trình và thấy rằng một tệp mới có tên

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
0 xuất hiện trong thư mục dự án của bạn. Mở tệp và bạn sẽ thấy thông báo này trong tệp:

DEBUG:root:Debug logging test...

Và bạn có nó rồi đấy! Bây giờ mức độ tin nhắn nhật ký của bạn đã được đặt gỡ lỗi, bạn có thể sử dụng tất cả các phương thức ghi nhật ký khác để đăng nhập nhiều lỗi nghiêm trọng hơn. Đây là cách toàn bộ chương trình có thể trông như bây giờ:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
0

Chạy đoạn mã này ghi lại tất cả các cấp tin nhắn khác nhau vào tệp log.txt, trông như thế này:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
1

5. Cách định dạng thông báo nhật ký

Bây giờ tất cả các tin nhắn được định dạng theo cách này:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
2

Here:

  • Yếu tố đầu tiên là cấp độ tin nhắn. Ví dụ
    DEBUG:root:Debug logging test...
    1.
  • Phần tử thứ hai là đối tượng logger. Trong hướng dẫn này, chúng tôi sử dụng logger gốc, vì vậy nó hiển thị
    import logging
    
    logging.basicConfig()
    9.
  • Mục thứ ba là tin nhắn đã đăng nhập.

Nhưng định dạng có thể bao gồm một cái gì đó nhiều thông tin hơn, chẳng hạn như thời gian và thông điệp.

Để loại bỏ định dạng mặc định, bạn có thể tùy chỉnh định dạng bằng cách chỉ định khóa

import logging

logging.basicConfig(filename="log.txt")
0 trong cuộc gọi
import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
4.

Ví dụ: hãy để định dạng các tin nhắn đã ghi lại sao cho chỉ thời gian và thông báo được hiển thị. Hãy để sửa đổi cuộc gọi

import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
4:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
3

Bây giờ bạn có thể chạy toàn bộ chương trình một lần nữa:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
4

Bây giờ đầu ra được định dạng với dấu thời gian giống như chúng tôi muốn:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
5

(Số nguyên

import logging

logging.basicConfig(filename="log.txt")
3 là số mili giây mà hoạt động này đã thực hiện.)

Lưu ý rằng đây không phải là thông tin duy nhất bạn có thể đưa vào tin nhắn đã đăng nhập. Dưới đây là danh sách đầy đủ tất cả các thông tin bạn có thể hiển thị về tin nhắn.

6. Nối hoặc ghi đè tệp nhật ký trong Python

Hãy thử chạy chương trình ghi nhật ký ví dụ nhiều lần. Nếu bạn mở tệp, bạn có thể thấy các lỗi được thêm vào tệp. Các bản ghi từ các lần chạy trước vẫn còn đó.

Điều này là do, theo mặc định, logger được cấu hình để nối các tin nhắn vào tệp nhật ký.

Bạn cũng có thể thay đổi điều này bằng cách chỉ định

import logging

logging.basicConfig(filename="log.txt")
4 trong cuộc gọi
import logging

logging.basicConfig(filename="log.txt", level=logging.DEBUG)
logging.debug("Debug logging test...")
4.

Nếu bạn muốn ghi đè lên các nhật ký thay vì thêm chúng, hãy chỉ định

import logging

logging.basicConfig(filename="log.txt")
4 là W W W.

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
6

Nếu bây giờ bạn chạy chương trình, nhật ký mới ghi đè lên những cái trước.

Một lần cuối cùng ở đây là chương trình đầy đủ:

import logging

logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
                     datefmt = '%m/%d/%Y %I:%M:%S %p' )

for i in range(0,2):
   logging.debug("Iam in file2")
7

Sự kết luận

Hôm nay bạn đã học cách tạo một tệp nhật ký trong Python và cách đăng nhập các tin nhắn ở các cấp độ khác nhau vào nó.

Một tệp nhật ký có thể hữu ích để theo dõi các lỗi và sự cố trong mã của bạn. Một tệp nhật ký được cấu hình đúng hướng dẫn đến nguồn lỗi khá dễ dàng.

Cảm ơn vì đã đọc. Tôi hy vọng bạn thấy nó hữu dụng.

Mã hóa hạnh phúc!

Đọc thêm

Câu hỏi và câu trả lời phỏng vấn Python

Các tính năng nâng cao hữu ích của Python