Source code for ElementsKernel.Logging
#
# Copyright (C) 2012-2020 Euclid Science Ground Segment
#
# This library is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3.0 of the License, or (at your option)
# any later version.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
'''
:file: ElementsKernel/Logging.py
:date: Apr 29, 2016
:author: Hubert Degaudenzi
'''
import logging
# Check we are running for the first time. If we are we need to change a bit the
# naming of the logging levels to match the ones of the C++
if logging.getLevelName(logging.CRITICAL) == 'CRITICAL':
logging.addLevelName(50, 'FATAL')
logging.addLevelName(40, 'ERROR')
logging.addLevelName(30, 'WARN')
logging.addLevelName(20, 'INFO')
logging.addLevelName(10, 'DEBUG')
_formatter = logging.Formatter(fmt='%(asctime)s %(name)s %(levelname)5s : %(message)s', datefmt='%Y-%m-%dT%X%Z')
# Check if we have the console logger set already. This might happen if the
# user reloads the module using the reload() method.
if not [h for h in logging.getLogger().handlers if h.get_name() == 'console']:
# Set the default logging level
logging.getLogger().setLevel(logging.INFO)
# Add the stderr log handler
_console = logging.StreamHandler()
_console.set_name('console')
_console.setFormatter(_formatter)
logging.getLogger().addHandler(_console)
[docs]def getLogger(name=None):
""" Forward call to logging.getLogger"""
return logging.getLogger(name)
[docs]def setLevel(level):
""" Forward call to logging.getLogger().setLevel"""
logging.getLogger().setLevel(level)
[docs]def setLogFile(filename):
"""Set the log file name"""
# If we already have a file appenders remove them
for hd in [hl for hl in logging.getLogger().handlers if hl.get_name() == 'file']:
logging.getLogger().removeHandler(hd)
hd.close()
# Add the new file handler
hd = logging.FileHandler(filename)
hd.set_name('file')
hd.setFormatter(_formatter)
logging.getLogger().addHandler(hd)