Merge pull request #691 from darko-poljak/log-timestamping

Add timestamp to log messages.
This commit is contained in:
Darko Poljak 2018-09-26 20:35:14 +02:00 committed by GitHub
commit 1e34fc20be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 12 deletions

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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