2012-04-26 38 views
26

Có ai biết nếu có cách nào để sử dụng một biến trong hàm setlevel() của mô-đun Logging của Python không?Đăng nhập bằng Python setlevel

Hiện nay tôi đang sử dụng này:

Log = logging.getLogger('myLogger') 
Log.setLevel(logging.DEBUG) 

Nhưng tôi muốn có điều này:

Log = logging.getLogger('myLogger') 
levels = {'CRITICAL' : logging.critical, 
    'ERROR' : logging.error, 
    'WARNING' : logging.warning, 
    'INFO' : logging.info, 
    'DEBUG' : logging.debug 
} 
level = levels['INFO'] 
Log.setLevel(level) 

Nhưng nó dường như không làm việc - nó chỉ không đăng nhập bất cứ điều gì. Tôi đang làm điều này để tôi có thể đặt mức ghi nhật ký cho toàn bộ chuỗi tập lệnh từ một biến trong một tệp cấu hình duy nhất. Lời xin lỗi của tôi nếu tôi thiếu một cái gì đó hiển nhiên ở đây!

+9

Bạn nên sử dụng chữ hoa trong các giá trị dict của bạn: 'ERROR: logging.ERROR' etc – georg

+0

Tôi không thể tin rằng nó đơn giản như vậy! Tôi xấu hổ. – Jak

+1

xảy ra với tất cả chúng ta;) – georg

Trả lời

55

Bạn cũng sẽ có thể làm điều này:

Log = logging.getLogger('myLogger') 
level = logging.getLevelName('INFO') 
Log.setLevel(level) 

Chức năng logging.getLevelName(lvl) làm việc cả hai cách. Tôi sử dụng nó, nó hoạt động (bạn nên kiểm tra thực hiện python của bạn mặc dù).

Điều này giúp bạn tránh được rắc rối để duy trì từ điển của riêng mình và giảm khả năng lỗi đánh máy.

Chúc mừng!

+0

Điều này thực sự hữu ích. Cảm ơn! – skytreader

+3

trích dẫn: "Trong các phiên bản Python sớm hơn 3.4, chức năng này cũng có thể được thông qua một cấp văn bản, và sẽ trả về giá trị số tương ứng của cấp đó. 3.4.2 do duy trì tính tương thích ngược. " – VPfB

3

Tôi đã có vấn đề với python 3 và đã làm việc này cho tôi: https://docs.python.org/3/howto/logging.html

# myapp.py 
import logging 
import mylib 

def main(): 
    logging.basicConfig(filename='myapp.log', level=logging.INFO) 
    logging.info('Started') 
    mylib.do_something() 
    logging.info('Finished') 

if __name__ == '__main__': 
    main() 
+0

+1 Tôi thích cách bạn có tất cả các cuộc gọi đăng nhập trong một định nghĩa hàm. Điều này làm giảm khả năng của [vấn đề khóa nhập với ghi nhật ký] (https://stackoverflow.com/questions/46356672/). –

0

gì về việc sử dụng getattr trên logging module?

import logging 
str_level = 'DEBUG' 
level = getattr(logging, str_level) 
logger = logging.getLogger("my_logger") 
logger.setLevel(level) 
print(logger.getEffectiveLevel()) 
Các vấn đề liên quan