Kỹ thuật LOGGING <P2>
Bổ xung hơn các kiến thức thực tế về Logging, bài trước chỉ mang tính lý thuyết
Logging tutorial
Các từ khóa quan trọng của Logging API được cung cấp bởi một thư viện chuẩn Python. Thư viện chuẩn Python hỗ trợ cho việc viết các log messages to file, HTTP GET/POST locations, Email via SMTP, generic Socket, hoặc OS- specific logging mechansms. Hoặc bạn có thể tạo ra các log destination class cho riêng mình với các điều kiện cụ thể mà các built-in classes không có
Để quản lý nhiều hơn size file, bạn có thể sử dụng RotatingFileHandler:
import glob import logging import logging.handlers LOG_FILENAME = 'logging_rotatingfile_example.out' # Set up a specific logger with our desired output level my_logger = logging.getLogger('MyLogger') my_logger.setLevel(logging.DEBUG) # Add the log message handler to the logger handler = logging.handlers.RotatingFileHandler( LOG_FILENAME, maxBytes=20, backupCount=5) my_logger.addHandler(handler) # Log some messages for i in range(20): my_logger.debug('i = %d' % i) # See what files are created logfiles = glob.glob('%s*' % LOG_FILENAME) for filename in logfiles: print(filename)
kết quả sẽ hiện ra 6 file, hiển thị các phần log history của applicaticon
logging_rotatingfile_example.out
logging_rotatingfile_example.out.1
logging_rotatingfile_example.out.2
logging_rotatingfile_example.out.3
logging_rotatingfile_example.out.4
logging_rotatingfile_example.out.5
The most current file sẽ là LOG_FILENAME
Mỗi lần nó tách size limit thì file sẽ được đổi tên với suffix là ".i"
maxBytes dùng để giới hạn size của file
Tính năng useful khác của logging là hiển thì các log messages khác nhau trong các level khác nhau.
import logging import sys LEVELS = {'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARNING, 'error': logging.ERROR, 'critical': logging.CRITICAL} if len(sys.argv) > 1: level_name = sys.argv[1] level = LEVELS.get(level_name, logging.NOTSET) logging.basicConfig(level=level) logging.debug('This is a debug message') logging.info('This is an info message') logging.warning('This is a warning message') logging.error('This is an error message') logging.critical('This is a critical error message')
chạy file trên ở level Debug hoặc Info thì các log message sẽ hiện ra khác nhau như sau:$ python logging_level_example.py debug DEBUG:root:This is a debug message INFO:root:This is an info message WARNING:root:This is a warning message ERROR:root:This is an error message CRITICAL:root:This is a critical error message $ python logging_level_example.py info INFO:root:This is an info message WARNING:root:This is a warning message ERROR:root:This is an error message CRITICAL:root:This is a critical error message
Các bạn thấy rằng, trong mỗi log messages đều có root , Và bạn có thể thay đổi được điều này.
Hãy xem một ví dụ log từ các module khác nhau để dễ dàng phát hiện ra file nguồn của các messages:
import logging
logging.basicConfig(filename = 'hehe.log', filemode = 'w', level=logging.WARNING)
logger1 = logging.getLogger('package1.module1')
logger2 = logging.getLogger('package2.module2')
logger1.warning('This message comes from one module')
logger2.warning('And this message comes from another module')
kết quả output:
$ python logging_modules_example.py
WARNING:package1.module1:This message comes from one module
WARNING:package2.module2:And this message comes from another module
bài này viết về logrotate à ?
Trả lờiXóamặc dù ko dùng nhiều nhưng cũng là 1 thứ nên biết.