2011-08-24 36 views
5

Tôi đang tìm cách để thực hiện định dạng chuỗi một phần trong trình ghi nhật ký ghi nhật ký Python.

Khi cố gắng để xác định một định dạng theo cách sau:
Định dạng chuỗi một phần trong Python Logging Formatters

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

tôi sẽ nhận được một TypeError với "định dạng đòi hỏi một bản đồ" mà là hợp lý khi người phiên dịch không thể tìm thấy 'levelname' và 'thông điệp'.

Tất nhiên, tôi muốn cả 'tên cấp' và 'tin nhắn' vẫn không được định dạng cho khung đăng nhập để xử lý.

Như tôi thấy, có hai cách khác để giải quyết vấn đề này:

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')

Tuy nhiên, tôi thấy cả hai giải pháp có phần xấu xí, và tôi tin rằng có phải là một cách tốt hơn để định dạng chỉ một phần của chuỗi - hoặc bằng Python, hoặc sử dụng trong khung công tác ghi nhật ký dựng sẵn python.

Bất kỳ ý tưởng nào?

+0

trùng lặp của http://stackoverflow.com/questions/4928526/python-format-string – Stefano

Trả lời

5

Hãy thử điều này:

formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,)) 

Bạn cần phải cung cấp cho các phương pháp Formatter chuỗi của bạn với %(...)s lĩnh vực. %% sẽ diễn giải thành % và do đó có thể được sử dụng.

+0

Hoạt động tuyệt vời, cảm ơn! – amito

Các vấn đề liên quan