Merge pull request #691 from darko-poljak/log-timestamping
Add timestamp to log messages.
This commit is contained in:
		
				commit
				
					
						1e34fc20be
					
				
			
		
					 6 changed files with 51 additions and 12 deletions
				
			
		| 
						 | 
					@ -251,6 +251,11 @@ def get_parsers():
 | 
				
			||||||
                  'line). If no host or host file is specified then, by '
 | 
					                  'line). If no host or host file is specified then, by '
 | 
				
			||||||
                  'default, read hosts from stdin.'),
 | 
					                  'default, read hosts from stdin.'),
 | 
				
			||||||
            dest='hostfile', required=False)
 | 
					            dest='hostfile', required=False)
 | 
				
			||||||
 | 
					    parser['config_args'].add_argument(
 | 
				
			||||||
 | 
					           '-P', '--timestamp',
 | 
				
			||||||
 | 
					           help=('Timestamp log messages with the current local date and time '
 | 
				
			||||||
 | 
					                 'in the format: YYYYMMDDHHMMSS.us.'),
 | 
				
			||||||
 | 
					           action='store_true', dest='timestamp')
 | 
				
			||||||
    parser['config_args'].add_argument(
 | 
					    parser['config_args'].add_argument(
 | 
				
			||||||
           '-p', '--parallel', nargs='?', metavar='HOST_MAX',
 | 
					           '-p', '--parallel', nargs='?', metavar='HOST_MAX',
 | 
				
			||||||
           type=functools.partial(check_lower_bounded_int, lower_bound=1,
 | 
					           type=functools.partial(check_lower_bounded_int, lower_bound=1,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -165,19 +165,20 @@ class Config(object):
 | 
				
			||||||
    def commandline(cls, args):
 | 
					    def commandline(cls, args):
 | 
				
			||||||
        """Configure remote system"""
 | 
					        """Configure remote system"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # FIXME: Refactor relict - remove later
 | 
					        if (args.parallel and args.parallel != 1) or args.jobs:
 | 
				
			||||||
        log = logging.getLogger("cdist")
 | 
					            if args.timestamp:
 | 
				
			||||||
 | 
					                cdist.log.setupTimestampingParallelLogging()
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                cdist.log.setupParallelLogging()
 | 
				
			||||||
 | 
					        elif args.timestamp:
 | 
				
			||||||
 | 
					            cdist.log.setupTimestampingLogging()
 | 
				
			||||||
 | 
					        log = logging.getLogger("config")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # No new child process if only one host at a time.
 | 
					        # No new child process if only one host at a time.
 | 
				
			||||||
        if args.parallel == 1:
 | 
					        if args.parallel == 1:
 | 
				
			||||||
            log.debug("Only 1 parallel process, doing it sequentially")
 | 
					            log.debug("Only 1 parallel process, doing it sequentially")
 | 
				
			||||||
            args.parallel = 0
 | 
					            args.parallel = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if args.parallel or args.jobs:
 | 
					 | 
				
			||||||
            # If parallel execution then also log process id
 | 
					 | 
				
			||||||
            cdist.log.setupParallelLogging()
 | 
					 | 
				
			||||||
            log = logging.getLogger("cdist")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if args.parallel:
 | 
					        if args.parallel:
 | 
				
			||||||
            import signal
 | 
					            import signal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ class CdistType(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger("cdist")
 | 
					    log = logging.getLogger("cdist-type")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, base_path, name):
 | 
					    def __init__(self, base_path, name):
 | 
				
			||||||
        self.base_path = base_path
 | 
					        self.base_path = base_path
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										28
									
								
								cdist/log.py
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								cdist/log.py
									
										
									
									
									
								
							| 
						 | 
					@ -22,6 +22,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Define additional cdist logging levels.
 | 
					# Define additional cdist logging levels.
 | 
				
			||||||
| 
						 | 
					@ -95,15 +96,42 @@ class DefaultLog(logging.Logger):
 | 
				
			||||||
        self.log(logging.TRACE, msg, *args, **kwargs)
 | 
					        self.log(logging.TRACE, msg, *args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TimestampingLog(DefaultLog):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def filter(self, record):
 | 
				
			||||||
 | 
					        """Add timestamp to messages"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        super().filter(record)
 | 
				
			||||||
 | 
					        now = datetime.datetime.now()
 | 
				
			||||||
 | 
					        timestamp = now.strftime("%Y%m%d%H%M%S.%f")
 | 
				
			||||||
 | 
					        record.msg = "[" + timestamp + "] " + str(record.msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ParallelLog(DefaultLog):
 | 
					class ParallelLog(DefaultLog):
 | 
				
			||||||
    FORMAT = '%(levelname)s: [%(process)d]: %(message)s'
 | 
					    FORMAT = '%(levelname)s: [%(process)d]: %(message)s'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TimestampingParallelLog(TimestampingLog, ParallelLog):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setupDefaultLogging():
 | 
					def setupDefaultLogging():
 | 
				
			||||||
    del logging.getLogger().handlers[:]
 | 
					    del logging.getLogger().handlers[:]
 | 
				
			||||||
    logging.setLoggerClass(DefaultLog)
 | 
					    logging.setLoggerClass(DefaultLog)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def setupTimestampingLogging():
 | 
				
			||||||
 | 
					    del logging.getLogger().handlers[:]
 | 
				
			||||||
 | 
					    logging.setLoggerClass(TimestampingLog)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def setupTimestampingParallelLogging():
 | 
				
			||||||
 | 
					    del logging.getLogger().handlers[:]
 | 
				
			||||||
 | 
					    logging.setLoggerClass(TimestampingParallelLog)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setupParallelLogging():
 | 
					def setupParallelLogging():
 | 
				
			||||||
    del logging.getLogger().handlers[:]
 | 
					    del logging.getLogger().handlers[:]
 | 
				
			||||||
    logging.setLoggerClass(ParallelLog)
 | 
					    logging.setLoggerClass(ParallelLog)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,8 @@ SYNOPSIS
 | 
				
			||||||
                 [-j [JOBS]] [-n] [-o OUT_PATH] [-R [{tar,tgz,tbz2,txz}]]
 | 
					                 [-j [JOBS]] [-n] [-o OUT_PATH] [-R [{tar,tgz,tbz2,txz}]]
 | 
				
			||||||
                 [-r REMOTE_OUT_DIR] [--remote-copy REMOTE_COPY]
 | 
					                 [-r REMOTE_OUT_DIR] [--remote-copy REMOTE_COPY]
 | 
				
			||||||
                 [--remote-exec REMOTE_EXEC] [-I INVENTORY_DIR] [-4] [-6]
 | 
					                 [--remote-exec REMOTE_EXEC] [-I INVENTORY_DIR] [-4] [-6]
 | 
				
			||||||
                 [-A] [-a] [-f HOSTFILE] [-p [HOST_MAX]] [-S] [-s] [-t]
 | 
					                 [-A] [-a] [-f HOSTFILE] [-P] [-p [HOST_MAX]] [-S] [-s]
 | 
				
			||||||
 | 
					                 [-t]
 | 
				
			||||||
                 [host [host ...]] 
 | 
					                 [host [host ...]] 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cdist install [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-g CONFIG_FILE]
 | 
					    cdist install [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-g CONFIG_FILE]
 | 
				
			||||||
| 
						 | 
					@ -28,7 +29,8 @@ SYNOPSIS
 | 
				
			||||||
                  [-j [JOBS]] [-n] [-o OUT_PATH] [-R [{tar,tgz,tbz2,txz}]]
 | 
					                  [-j [JOBS]] [-n] [-o OUT_PATH] [-R [{tar,tgz,tbz2,txz}]]
 | 
				
			||||||
                  [-r REMOTE_OUT_DIR] [--remote-copy REMOTE_COPY]
 | 
					                  [-r REMOTE_OUT_DIR] [--remote-copy REMOTE_COPY]
 | 
				
			||||||
                  [--remote-exec REMOTE_EXEC] [-I INVENTORY_DIR] [-4] [-6]
 | 
					                  [--remote-exec REMOTE_EXEC] [-I INVENTORY_DIR] [-4] [-6]
 | 
				
			||||||
                  [-A] [-a] [-f HOSTFILE] [-p [HOST_MAX]] [-S] [-s] [-t]
 | 
					                  [-A] [-a] [-f HOSTFILE] [-P] [-p [HOST_MAX]] [-S] [-s]
 | 
				
			||||||
 | 
					                  [-t]
 | 
				
			||||||
                  [host [host ...]] 
 | 
					                  [host [host ...]] 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cdist inventory [-h] {add-host,add-tag,del-host,del-tag,list} ...
 | 
					    cdist inventory [-h] {add-host,add-tag,del-host,del-tag,list} ...
 | 
				
			||||||
| 
						 | 
					@ -171,6 +173,10 @@ Install command is currently in beta.
 | 
				
			||||||
**-o OUT_PATH, --out-dir OUT_PATH**
 | 
					**-o OUT_PATH, --out-dir OUT_PATH**
 | 
				
			||||||
    Directory to save cdist output in.
 | 
					    Directory to save cdist output in.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**-P, --timestamp**
 | 
				
			||||||
 | 
					    Timestamp log messages with the current local date and time
 | 
				
			||||||
 | 
					    in the format: YYYYMMDDHHMMSS.us.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**-p [HOST_MAX], --parallel [HOST_MAX]**
 | 
					**-p [HOST_MAX], --parallel [HOST_MAX]**
 | 
				
			||||||
    Operate on multiple hosts in parallel for specified
 | 
					    Operate on multiple hosts in parallel for specified
 | 
				
			||||||
    maximum hosts at a time. Without argument CPU count is
 | 
					    maximum hosts at a time. Without argument CPU count is
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,8 +69,6 @@ if __name__ == "__main__":
 | 
				
			||||||
        import re
 | 
					        import re
 | 
				
			||||||
        import os
 | 
					        import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        log = logging.getLogger("cdist")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if re.match("__", os.path.basename(sys.argv[0])):
 | 
					        if re.match("__", os.path.basename(sys.argv[0])):
 | 
				
			||||||
            import cdist.emulator
 | 
					            import cdist.emulator
 | 
				
			||||||
            emulator = cdist.emulator.Emulator(sys.argv)
 | 
					            emulator = cdist.emulator.Emulator(sys.argv)
 | 
				
			||||||
| 
						 | 
					@ -82,6 +80,7 @@ if __name__ == "__main__":
 | 
				
			||||||
        exit_code = 2
 | 
					        exit_code = 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    except cdist.Error as e:
 | 
					    except cdist.Error as e:
 | 
				
			||||||
 | 
					        log = logging.getLogger("cdist")
 | 
				
			||||||
        log.error(e)
 | 
					        log.error(e)
 | 
				
			||||||
        exit_code = 1
 | 
					        exit_code = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue