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…
Reference in a new issue