Edgewall Software

Ticket #2844: log_format-r4543.diff

File log_format-r4543.diff, 4.2 kB (added by cboos, 19 months ago)

Configurable format for the log messages.

  • trac/env.py

     
    109109         
    110110        Should be one of (`CRITICAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`).""") 
    111111 
     112    log_format = Option('logging', 'log_format', None, 
     113        """Custom logging format. 
     114 
     115        If nothing is set, the following will be used: 
     116         
     117        Trac[$(module)s] $(levelname)s: $(message)s 
     118 
     119        Besides regular key names supported by the Python logger library 
     120        (see http://docs.python.org/lib/node422.html), one could use also: 
     121         - $(logid)s    the path for the current environment 
     122         - $(basename)s the last path component of the current environment 
     123         - $(project)s  the project name 
     124 
     125         Note the usage of `$(...)s` instead of `%(...)s` as the latter form 
     126         would be interpreted by the ConfigParser itself. 
     127 
     128         Example: 
     129         ($(thread)d) Trac[$(basename)s:$(module)s] $(levelname)s: $(message)s 
     130         """) 
     131 
    112132    def __init__(self, path, create=False, options=[]): 
    113133        """Initialize the Trac environment. 
    114134         
     
    281301        logfile = self.log_file 
    282302        if logtype == 'file' and not os.path.isabs(logfile): 
    283303            logfile = os.path.join(self.get_log_dir(), logfile) 
    284         self.log = logger_factory(logtype, logfile, self.log_level, self.path) 
     304        self.log = logger_factory(logtype, logfile, self.log_level, self.path, 
     305                                  format=self.log_format, 
     306                                  project=self.project_name, 
     307                                  basename=os.path.basename(self.path)) 
    285308 
    286309    def get_known_users(self, cnx=None): 
    287310        """Generator that yields information about all known users, i.e. users 
  • trac/log.py

     
    2020import sys 
    2121 
    2222def logger_factory(logtype='syslog', logfile=None, level='WARNING', 
    23                    logid='Trac'): 
     23                   logid='Trac', format=None, basename='', project=''): 
    2424    logger = logging.getLogger(logid) 
    2525    logtype = logtype.lower() 
    2626    if logtype == 'file': 
    2727        hdlr = logging.FileHandler(logfile) 
    28     elif logtype in ['winlog', 'eventlog', 'nteventlog']: 
     28    elif logtype in ('winlog', 'eventlog', 'nteventlog'): 
    2929        # Requires win32 extensions 
    3030        hdlr = logging.handlers.NTEventLogHandler(logid, 
    3131                                                  logtype='Application') 
    32     elif logtype in ['syslog', 'unix']: 
     32    elif logtype in ('syslog', 'unix'): 
    3333        hdlr = logging.handlers.SysLogHandler('/dev/log') 
    34     elif logtype in ['stderr']: 
     34    elif logtype in ('stderr'): 
    3535        hdlr = logging.StreamHandler(sys.stderr) 
    3636    else: 
    3737        hdlr = logging.handlers.BufferingHandler(0) 
    3838        # Note: this _really_ throws away log events, as a `MemoryHandler` 
    3939        # would keep _all_ records in case there's no target handler (a bug?) 
    4040 
    41     format = 'Trac[%(module)s] %(levelname)s: %(message)s' 
    42     if logtype in ['file', 'stderr']: 
    43         format = '%(asctime)s ' + format  
     41    if not format: 
     42        format = 'Trac[%(module)s] %(levelname)s: %(message)s' 
     43        if logtype in ('file', 'stderr'): 
     44            format = '%(asctime)s ' + format 
     45    else: 
     46        format = format.replace('$(', '%(') 
     47    format = format.replace('%(logid)s', logid) \ 
     48             .replace('%(project)s', project) \ 
     49             .replace('%(basename)s', basename) 
    4450    datefmt = '' 
    4551    if logtype == 'stderr': 
    4652        datefmt = '%X'         
    4753    level = level.upper() 
    48     if level in ['DEBUG', 'ALL']: 
     54    if level in ('DEBUG', 'ALL'): 
    4955        logger.setLevel(logging.DEBUG) 
    5056    elif level == 'INFO': 
    5157        logger.setLevel(logging.INFO) 
     
    5561        logger.setLevel(logging.CRITICAL) 
    5662    else: 
    5763        logger.setLevel(logging.WARNING) 
    58     formatter = logging.Formatter(format,datefmt) 
     64    formatter = logging.Formatter(format, datefmt) 
    5965    hdlr.setFormatter(formatter) 
    6066    logger.addHandler(hdlr)  
    6167