2010-07-22 22 views

Trả lời

5

logging.config.fileConfig('some.log') sẽ cố gắng đọc cấu hình ghi nhật ký từ some.log.

Tôi không tin rằng có một cách chung để truy xuất tệp đích - không phải lúc nào cũng được đảm bảo sẽ chuyển đến tệp. (Nó có thể đi đến syslog, qua mạng, vv)

8

tôi cần phải làm điều gì đó tương tự như trong một môi trường khai thác gỗ rất đơn giản, các thói quen sau đây đã làm các trick

def _find_logger_basefilename(self, logger): 
    """Finds the logger base filename(s) currently there is only one 
    """ 
    log_file = None 
    parent = logger.__dict__['parent'] 
    if parent.__class__.__name__ == 'RootLogger': 
     # this is where the file name lives 
     for h in logger.__dict__['handlers']: 
      if h.__class__.__name__ == 'TimedRotatingFileHandler': 
       log_file = h.baseFilename 
    else: 
     log_file = self._find_logger_basefilename(parent) 

    return log_file  

tôi đang tìm kiếm các tập tin được sử dụng bởi TimedRotatingFileHandler, bạn có thể cần phải thay đổi loại trình xử lý mà bạn tìm kiếm, có thể là FileHandler.

Không chắc chắn nó sẽ hoạt động như thế nào trong bất kỳ môi trường ghi nhật ký phức tạp nào.

-1

Trong trường hợp của mình, tôi đã sử dụng để khởi tạo một trình ghi nhật ký duy nhất (trong tập lệnh chính) và sử dụng nó trong tất cả các gói của mình bằng cách thực hiện locallogger = logging.getLogger(__name__). Trong thiết lập này để có được những đường dẫn tập tin đăng nhập tôi đã phải sửa đổi @ câu trả lời của John như sau

def find_rootlogger_basefilename(): 
"""Finds the root logger base filename 
""" 
log_file = None 
rootlogger = logging.getLogger('') 
for h in rootlogger.__dict__['handlers']: 
    if h.__class__.__name__ == 'FileHandler': 
     log_file = h.baseFilename 
     break 
    elif h.__class__.__name__ == 'TimedRotatingFileHandler': 
     log_file = h.baseFilename 
     break 

return log_file 
5

Đối với sử dụng cơ bản của tôi về một log file duy nhất, điều này làm việc

logging.getLoggerClass().root.handlers[0].baseFilename 
0

Dưới logic đơn giản cho tập tin duy nhất người xử lý:

>>> import logging 
>>> logger = logging.getLogger("test") 
>>> handler = logging.FileHandler("testlog.log") 
>>> logger.addHandler(handler) 
>>> print logger.handlers[0].baseFilename 
/home/nav/testlog.log 
>>> 
Các vấn đề liên quan