NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

logutils.py (3332B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\brennivin\logutils.py
      2 import fnmatch as _fnmatch
      3 import logging as _logging
      4 import os as _os
      5 import time as _time
      6 try:
      7     NullHandler = _logging.NullHandler
      8 except AttributeError:
      9 
     10     class NullHandler(_logging.Handler):
     11 
     12         def emit(self, record):
     13             pass
     14 
     15 
     16     _logging.NullHandler = NullHandler
     17 
     18 class Fmt(object):
     19     NTLM = '%(name)s %(asctime)s %(levelname)s:  %(message)s'
     20     FMT_NTLM = _logging.Formatter(NTLM)
     21     LM = '%(levelname)s: %(message)s'
     22     FMT_LM = _logging.Formatter(LM)
     23 
     24 
     25 class MultiLineIndentFormatter(_logging.Formatter):
     26 
     27     def __init__(self, fmt = None, datefmt = None, sep = ' '):
     28         _logging.Formatter.__init__(self, fmt, datefmt)
     29         self.sep = sep
     30 
     31     def format(self, record):
     32         formattedRecord = _logging.Formatter.format(self, record)
     33         header, footer = formattedRecord.split(record.msg)
     34         s = formattedRecord.replace('\n', '\n' + self.sep * len(header))
     35         return s
     36 
     37 
     38 def timestamped_filename(filename, fmt = '%Y-%m-%d-%H-%M-%S', timestruct = None, sep = '_'):
     39     head, ext = _os.path.splitext(filename)
     40     timestr = timestamp(fmt, timestruct)
     41     return '%s%s%s%s' % (head,
     42      sep,
     43      timestr,
     44      ext)
     45 
     46 
     47 def timestamp(fmt, timestruct = None):
     48     return _time.strftime(fmt, timestruct or _time.gmtime())
     49 
     50 
     51 def get_timestamped_logfilename(folder, basename = None, ext = '.log', fmt = '%Y-%m-%d-%H-%M-%S', timestruct = None, _getpid = _os.getpid):
     52     if basename is None:
     53         basename = _os.path.basename(folder)
     54     timestamped = timestamp(fmt, timestruct)
     55     pid = _getpid()
     56     logname = '{basename}_{timestamped}_pid{pid}{ext}'.format(**locals())
     57     logfilename = _os.path.join(folder, logname)
     58     try:
     59         remove_old_files(folder, '*{basename}_*{ext}'.format(**locals()), 15)
     60     except OSError:
     61         pass
     62 
     63     return logfilename
     64 
     65 
     66 def get_filenames_from_loggers(loggers = None, _loggingmodule = None):
     67     _loggingmodule = _loggingmodule or _logging
     68     if loggers is None:
     69         loggers = [_loggingmodule.root]
     70         loggers.extend(_loggingmodule.Logger.manager.loggerDict.values())
     71     allfilenames = set()
     72     for logger in filter(lambda lo: hasattr(lo, 'handlers'), loggers):
     73         filenames = [ getattr(h, 'baseFilename', None) for h in logger.handlers ]
     74         for f in filter(None, filenames):
     75             allfilenames.add(_os.path.abspath(f))
     76 
     77     return tuple(allfilenames)
     78 
     79 
     80 def remove_old_files(root, namepattern = '*', maxfiles = 1):
     81     if maxfiles < 0:
     82         raise ValueError('maxfiles must be >= 0, got %s' % maxfiles)
     83     lstFiles = []
     84     for f in _os.listdir(root):
     85         if _fnmatch.fnmatch(f, namepattern):
     86             fileName = _os.path.join(root, f)
     87             lstFiles.append(fileName)
     88 
     89     lstFiles.sort(key=_os.path.getmtime, reverse=True)
     90     for f in lstFiles[maxfiles:]:
     91         try:
     92             _os.remove(f)
     93         except (OSError, IOError):
     94             pass
     95 
     96 
     97 def wrap_line(s, maxlines, maxlen = 254, pfx = '- '):
     98     e = len(s)
     99     if e <= maxlen:
    100         yield s
    101     else:
    102         i = maxlen
    103         maxlen -= len(pfx)
    104         maxlines -= 1
    105         yield s[:i]
    106         while i < e and maxlines:
    107             yield pfx + s[i:i + maxlen]
    108             i += maxlen
    109             maxlines -= 1