Updated docs
This commit is contained in:
@@ -1,21 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cpl-core sh-edraft Common Python library
|
||||
cpl-core CPL core
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
sh-edraft Common Python library
|
||||
CPL core package
|
||||
|
||||
:copyright: (c) 2020 - 2023 sh-edraft.de
|
||||
:license: MIT, see LICENSE for more details.
|
||||
|
||||
"""
|
||||
|
||||
__title__ = 'cpl_core.logging'
|
||||
__author__ = 'Sven Heidemann'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2020 - 2023 sh-edraft.de'
|
||||
__version__ = '2022.12.1'
|
||||
__title__ = "cpl_core.logging"
|
||||
__author__ = "Sven Heidemann"
|
||||
__license__ = "MIT"
|
||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
|
||||
__version__ = "2023.2.0"
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
@@ -27,5 +27,5 @@ from .logging_level_enum import LoggingLevelEnum
|
||||
from .logging_settings import LoggingSettings
|
||||
from .logging_settings_name_enum import LoggingSettingsNameEnum
|
||||
|
||||
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
|
||||
version_info = VersionInfo(major='2022', minor='12', micro='1')
|
||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
|
||||
version_info = VersionInfo(major="2023", minor="2", micro="0")
|
||||
|
@@ -12,8 +12,7 @@ class LoggerABC(ABC):
|
||||
def header(self, string: str):
|
||||
r"""Writes a header message
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
string: :class:`str`
|
||||
String to write as header
|
||||
"""
|
||||
@@ -23,8 +22,7 @@ class LoggerABC(ABC):
|
||||
def trace(self, name: str, message: str):
|
||||
r"""Writes a trace message
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Message name
|
||||
message: :class:`str`
|
||||
@@ -36,8 +34,7 @@ class LoggerABC(ABC):
|
||||
def debug(self, name: str, message: str):
|
||||
r"""Writes a debug message
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Message name
|
||||
message: :class:`str`
|
||||
@@ -49,8 +46,7 @@ class LoggerABC(ABC):
|
||||
def info(self, name: str, message: str):
|
||||
r"""Writes an information
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Message name
|
||||
message: :class:`str`
|
||||
@@ -62,8 +58,7 @@ class LoggerABC(ABC):
|
||||
def warn(self, name: str, message: str):
|
||||
r"""Writes an warning
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Message name
|
||||
message: :class:`str`
|
||||
@@ -75,8 +70,7 @@ class LoggerABC(ABC):
|
||||
def error(self, name: str, message: str, ex: Exception = None):
|
||||
r"""Writes an error
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Error name
|
||||
message: :class:`str`
|
||||
@@ -90,8 +84,7 @@ class LoggerABC(ABC):
|
||||
def fatal(self, name: str, message: str, ex: Exception = None):
|
||||
r"""Writes an error and ends the program
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Error name
|
||||
message: :class:`str`
|
||||
|
@@ -17,8 +17,7 @@ from cpl_core.time.time_format_settings import TimeFormatSettings
|
||||
class Logger(LoggerABC):
|
||||
r"""Service for logging
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
logging_settings: :class:`cpl_core.logging.logging_settings.LoggingSettings`
|
||||
Settings for the logger
|
||||
time_format: :class:`cpl_core.time.time_format_settings.TimeFormatSettings`
|
||||
@@ -27,7 +26,9 @@ class Logger(LoggerABC):
|
||||
Environment of the application
|
||||
"""
|
||||
|
||||
def __init__(self, logging_settings: LoggingSettings, time_format: TimeFormatSettings, env: ApplicationEnvironmentABC):
|
||||
def __init__(
|
||||
self, logging_settings: LoggingSettings, time_format: TimeFormatSettings, env: ApplicationEnvironmentABC
|
||||
):
|
||||
LoggerABC.__init__(self)
|
||||
|
||||
self._env = env
|
||||
@@ -48,7 +49,7 @@ class Logger(LoggerABC):
|
||||
date_time_now=self._env.date_time_now.strftime(self._time_format_settings.date_time_format),
|
||||
date_now=self._env.date_time_now.strftime(self._time_format_settings.date_format),
|
||||
time_now=self._env.date_time_now.strftime(self._time_format_settings.time_format),
|
||||
start_time=self._env.start_time.strftime(self._time_format_settings.date_time_log_format)
|
||||
start_time=self._env.start_time.strftime(self._time_format_settings.date_time_log_format),
|
||||
)
|
||||
|
||||
@property
|
||||
@@ -57,38 +58,36 @@ class Logger(LoggerABC):
|
||||
date_time_now=self._env.date_time_now.strftime(self._time_format_settings.date_time_format),
|
||||
date_now=self._env.date_time_now.strftime(self._time_format_settings.date_format),
|
||||
time_now=self._env.date_time_now.strftime(self._time_format_settings.time_format),
|
||||
start_time=self._env.start_time.strftime(self._time_format_settings.date_time_log_format)
|
||||
start_time=self._env.start_time.strftime(self._time_format_settings.date_time_log_format),
|
||||
)
|
||||
|
||||
def _check_for_settings(self, settings: ConfigurationModelABC, settings_type: type):
|
||||
self._level = LoggingLevelEnum.OFF
|
||||
self._console = LoggingLevelEnum.FATAL
|
||||
if settings is None:
|
||||
self.fatal(__name__, f'Configuration for {settings_type} not found')
|
||||
self.fatal(__name__, f"Configuration for {settings_type} not found")
|
||||
|
||||
def _get_datetime_now(self) -> str:
|
||||
r"""Returns the date and time by given format
|
||||
|
||||
Returns
|
||||
-------
|
||||
Returns:
|
||||
Date and time in given format
|
||||
"""
|
||||
try:
|
||||
return datetime.datetime.now().strftime(self._time_format_settings.date_time_format)
|
||||
except Exception as e:
|
||||
self.error(__name__, 'Cannot get time', ex=e)
|
||||
self.error(__name__, "Cannot get time", ex=e)
|
||||
|
||||
def _get_date(self) -> str:
|
||||
r"""Returns the date by given format
|
||||
|
||||
Returns
|
||||
-------
|
||||
Returns:
|
||||
Date in given format
|
||||
"""
|
||||
try:
|
||||
return datetime.datetime.now().strftime(self._time_format_settings.date_format)
|
||||
except Exception as e:
|
||||
self.error(__name__, 'Cannot get date', ex=e)
|
||||
self.error(__name__, "Cannot get date", ex=e)
|
||||
|
||||
def create(self) -> None:
|
||||
r"""Creates path tree and logfile"""
|
||||
@@ -99,46 +98,44 @@ class Logger(LoggerABC):
|
||||
if not os.path.exists(self._path):
|
||||
os.makedirs(self._path)
|
||||
except Exception as e:
|
||||
self._fatal_console(__name__, 'Cannot create log dir', ex=e)
|
||||
self._fatal_console(__name__, "Cannot create log dir", ex=e)
|
||||
|
||||
""" create new log file """
|
||||
try:
|
||||
# open log file, create if not exists
|
||||
path = f'{self._path}{self._log}'
|
||||
permission = 'a+'
|
||||
path = f"{self._path}{self._log}"
|
||||
permission = "a+"
|
||||
if not os.path.isfile(path):
|
||||
permission = 'w+'
|
||||
permission = "w+"
|
||||
|
||||
f = open(path, permission)
|
||||
Console.write_line(f'[{__name__}]: Using log file: {path}')
|
||||
Console.write_line(f"[{__name__}]: Using log file: {path}")
|
||||
f.close()
|
||||
except Exception as e:
|
||||
self._fatal_console(__name__, 'Cannot open log file', ex=e)
|
||||
self._fatal_console(__name__, "Cannot open log file", ex=e)
|
||||
|
||||
def _append_log(self, string: str):
|
||||
r"""Writes to logfile
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
string: :class:`str`
|
||||
"""
|
||||
try:
|
||||
# open log file and append always
|
||||
if not os.path.isdir(self._path):
|
||||
self._warn_console(__name__, 'Log directory not found, try to recreate logger')
|
||||
self._warn_console(__name__, "Log directory not found, try to recreate logger")
|
||||
self.create()
|
||||
|
||||
with open(self._path + self._log, "a+", encoding="utf-8") as f:
|
||||
f.write(string + '\n')
|
||||
f.write(string + "\n")
|
||||
f.close()
|
||||
except Exception as e:
|
||||
self._fatal_console(__name__, f'Cannot append log file, message: {string}', ex=e)
|
||||
self._fatal_console(__name__, f"Cannot append log file, message: {string}", ex=e)
|
||||
|
||||
def _get_string(self, name: str, level: LoggingLevelEnum, message: str) -> str:
|
||||
r"""Returns input as log entry format
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Name of the message
|
||||
level: :class:`cpl_core.logging.logging_level_enum.LoggingLevelEnum`
|
||||
@@ -146,12 +143,11 @@ class Logger(LoggerABC):
|
||||
message: :class:`str`
|
||||
Log message
|
||||
|
||||
Returns
|
||||
-------
|
||||
Returns:
|
||||
Formatted string for logging
|
||||
"""
|
||||
log_level = level.name
|
||||
return f'<{self._get_datetime_now()}> [ {log_level} ] [ {name} ]: {message}'
|
||||
return f"<{self._get_datetime_now()}> [ {log_level} ] [ {name} ]: {message}"
|
||||
|
||||
def header(self, string: str):
|
||||
# append log and print message
|
||||
@@ -213,11 +209,11 @@ class Logger(LoggerABC):
|
||||
Console.set_foreground_color(ForegroundColorEnum.default)
|
||||
|
||||
def error(self, name: str, message: str, ex: Exception = None):
|
||||
output = ''
|
||||
output = ""
|
||||
if ex is not None:
|
||||
tb = traceback.format_exc()
|
||||
self.error(name, message)
|
||||
output = self._get_string(name, LoggingLevelEnum.ERROR, f'{ex} -> {tb}')
|
||||
output = self._get_string(name, LoggingLevelEnum.ERROR, f"{ex} -> {tb}")
|
||||
else:
|
||||
output = self._get_string(name, LoggingLevelEnum.ERROR, message)
|
||||
|
||||
@@ -232,11 +228,11 @@ class Logger(LoggerABC):
|
||||
Console.set_foreground_color(ForegroundColorEnum.default)
|
||||
|
||||
def fatal(self, name: str, message: str, ex: Exception = None):
|
||||
output = ''
|
||||
output = ""
|
||||
if ex is not None:
|
||||
tb = traceback.format_exc()
|
||||
self.error(name, message)
|
||||
output = self._get_string(name, LoggingLevelEnum.FATAL, f'{ex} -> {tb}')
|
||||
output = self._get_string(name, LoggingLevelEnum.FATAL, f"{ex} -> {tb}")
|
||||
else:
|
||||
output = self._get_string(name, LoggingLevelEnum.FATAL, message)
|
||||
|
||||
@@ -255,8 +251,7 @@ class Logger(LoggerABC):
|
||||
def _warn_console(self, name: str, message: str):
|
||||
r"""Writes a warning to console only
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Error name
|
||||
message: :class:`str`
|
||||
@@ -271,8 +266,7 @@ class Logger(LoggerABC):
|
||||
def _fatal_console(self, name: str, message: str, ex: Exception = None):
|
||||
r"""Writes an error to console only
|
||||
|
||||
Parameter
|
||||
---------
|
||||
Parameter:
|
||||
name: :class:`str`
|
||||
Error name
|
||||
message: :class:`str`
|
||||
@@ -280,11 +274,11 @@ class Logger(LoggerABC):
|
||||
ex: :class:`Exception`
|
||||
Thrown exception
|
||||
"""
|
||||
output = ''
|
||||
output = ""
|
||||
if ex is not None:
|
||||
tb = traceback.format_exc()
|
||||
self.error(name, message)
|
||||
output = self._get_string(name, LoggingLevelEnum.ERROR, f'{ex} -> {tb}')
|
||||
output = self._get_string(name, LoggingLevelEnum.ERROR, f"{ex} -> {tb}")
|
||||
else:
|
||||
output = self._get_string(name, LoggingLevelEnum.ERROR, message)
|
||||
|
||||
|
@@ -2,11 +2,10 @@ from enum import Enum
|
||||
|
||||
|
||||
class LoggingLevelEnum(Enum):
|
||||
|
||||
OFF = 0 # Nothing
|
||||
FATAL = 1 # Error that cause exit
|
||||
ERROR = 2 # Non fatal error
|
||||
WARN = 3 # Error that can later be fatal
|
||||
INFO = 4 # Normal information's
|
||||
DEBUG = 5 # Detailed app state
|
||||
TRACE = 6 # Detailed app information's
|
||||
OFF = 0 # Nothing
|
||||
FATAL = 1 # Error that cause exit
|
||||
ERROR = 2 # Non fatal error
|
||||
WARN = 3 # Error that can later be fatal
|
||||
INFO = 4 # Normal information's
|
||||
DEBUG = 5 # Detailed app state
|
||||
TRACE = 6 # Detailed app information's
|
||||
|
@@ -58,6 +58,6 @@ class LoggingSettings(ConfigurationModelABC):
|
||||
self._level = LoggingLevelEnum[settings[LoggingSettingsNameEnum.file_level.value]]
|
||||
except Exception as e:
|
||||
Console.set_foreground_color(ForegroundColorEnum.red)
|
||||
Console.write_line(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings')
|
||||
Console.write_line(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}')
|
||||
Console.write_line(f"[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings")
|
||||
Console.write_line(f"[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}")
|
||||
Console.set_foreground_color(ForegroundColorEnum.default)
|
||||
|
@@ -2,8 +2,7 @@ from enum import Enum
|
||||
|
||||
|
||||
class LoggingSettingsNameEnum(Enum):
|
||||
|
||||
path = 'Path'
|
||||
filename = 'Filename'
|
||||
console_level = 'ConsoleLogLevel'
|
||||
file_level = 'FileLogLevel'
|
||||
path = "Path"
|
||||
filename = "Filename"
|
||||
console_level = "ConsoleLogLevel"
|
||||
file_level = "FileLogLevel"
|
||||
|
Reference in New Issue
Block a user