From 60ec4145bbb402da4912d11ee7eaea70b85322bc Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Thu, 29 Sep 2016 16:30:20 +0800 Subject: Add utility "setup_logging()" to setup/update logging This "setup_logging()" utility can setup the logging module with the given configuration dict, and can also update the logging configs by specify the additional parameters. --- fg21sim/utils/__init__.py | 1 + fg21sim/utils/logging.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 fg21sim/utils/logging.py (limited to 'fg21sim/utils') diff --git a/fg21sim/utils/__init__.py b/fg21sim/utils/__init__.py index 3548b3f..650ab37 100644 --- a/fg21sim/utils/__init__.py +++ b/fg21sim/utils/__init__.py @@ -2,3 +2,4 @@ # MIT license from .healpix import healpix2hpx, hpx2healpix +from .logging import setup_logging diff --git a/fg21sim/utils/logging.py b/fg21sim/utils/logging.py new file mode 100644 index 0000000..81e8880 --- /dev/null +++ b/fg21sim/utils/logging.py @@ -0,0 +1,70 @@ +# Copyright (c) 2016 Weitian LI +# MIT license + +""" +Logging utilities. +""" + +import sys +import logging +from logging import FileHandler, StreamHandler + + +def setup_logging(dict_config=None, stream=None, logfile=None): + """Setup the logging. + This will override the logging configurations in the config file + if specified (e.g., by command line arguments). + + Parameters + ---------- + dict_config : dict + Dict of logging configurations specified in the config file. + stream : string; "stderr", "stdout", or "" + This controls where the log messages go to. + If not None, then override the old ``StreamHandler`` settings; + if ``stream=""``, then disable the ``StreamHandler``. + logfile : string + Specify the file where the log messages go to. + If ``logfile=""``, then disable the ``FileHandler``. + + NOTE + ---- + If the logging already has ``StreamHandler`` or ``FileHandler`` + configured, then the old handler will be *replaced* (i.e., remove + the old one, then add the new one). + """ + # default file open mode for logging to file + filemode = "a" + if dict_config: + logging.basicConfig(**dict_config) + filemode = dict_config["filemode"] + # + root_logger = logging.getLogger() + if stream in ["", "stderr", "stdout"]: + for handler in root_logger.handlers: + if isinstance(handler, StreamHandler): + # remove old ``StreamHandler`` + root_logger.removeHandler(handler) + if stream == "": + # disable ``StreamHandler`` + pass + else: + # add new ``StreamHandler`` + handler = StreamHandler(getattr(sys, stream)) + root_logger.addHandler(handler) + else: + raise ValueError("invalid stream: %s" % stream) + # + if logfile is not None: + for handler in root_logger.handlers: + if isinstance(handler, FileHandler): + filemode = handler.mode + # remove old ``FileHandler`` + root_logger.removeHandler(handler) + if logfile == "": + # disable ``FileHandler`` + pass + else: + # add new ``FileHandler`` + handler = FileHandler(logfile, mode=filemode) + root_logger.addHandler(handler) -- cgit v1.2.2