|
Debug Tools
|


Public Member Functions | |
| def | __init__ (self, logger_name, logger_level=None) |
| def | output_file (self) |
| def | active (self) |
| def | debug_level (self) |
| def | debug_level (self, debug_level) |
| def | traceback (self, kwargs) |
| def | reset (self) |
| def | setup_basic (self, kwargs) |
| def | newline (self, debug_level=1, count=1) |
| def | new_line (self, debug_level=1, count=1) |
| def | __call__ (self, debug_level=1, msg=EMPTY_KWARG, args, kwargs) |
| def | clean (self, debug_level=1, msg=EMPTY_KWARG, args, kwargs) |
| def | basic (self, debug_level=1, msg=EMPTY_KWARG, args, kwargs) |
| def | clear (self, delete=False) |
| def | invert (self) |
| def | handle_stderr (self, stderr=False, stdout=False) |
| def | setup (self, file=EMPTY_KWARG, mode=EMPTY_KWARG, delete=EMPTY_KWARG, date=EMPTY_KWARG, levels=EMPTY_KWARG, function=EMPTY_KWARG, name=EMPTY_KWARG, time=EMPTY_KWARG, msecs=EMPTY_KWARG, tick=EMPTY_KWARG, separator=EMPTY_KWARG, formatter=EMPTY_KWARG, rotation=EMPTY_KWARG, kwargs) |
| def | warn (self, msg, args, kwargs) |
| def | exception (self, msg, args, kwargs) |
| def | addHandler (self, handler) |
| def | removeHandler (self, handler) |
| def | deleteAllLoggers (cls) |
| def | delete (self) |
| def | removeHandlers (self) |
| def | hasStreamHandlers (self) |
| def | fix_children (self, callable_action) |
| def | get_debug_file_path (cls, file_path) |
| def | remove_windows_driver_letter (cls, file_path) |
| def | getRootLogger (cls) |
| def | __str__ (self) |
| def | findCaller (self) |
| def | findCaller (self, stack_info=False) |
| def | makeRecord (self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None) |
| def | makeRecord (self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None) |
Static Public Member Functions | |
| def | getFormat (arguments, setting, default, next_parameter="") |
Public Attributes | |
| trimname | |
| full_formatter | |
| clean_formatter | |
| basic_formatter | |
| debug_level | |
| clean | |
| basic | |
https://docs.python.org/2.6/library/logging.html
How to define global function in Python?
https://stackoverflow.com/questions/27930038/how-to-define-global-function-in-python
How to print list inside python print?
https://stackoverflow.com/questions/45427500/how-to-print-list-inside-python-print
| def __init__ | ( | self, | |
| logger_name, | |||
logger_level = None |
|||
| ) |
See the factory global function logger.getLogger().
Definition at line 144 of file logger.py.
References Debugger._debugger_level, Debugger._file, Debugger._force_debug, Debugger._frame_level, Debugger._last_tick, Debugger._reset(), Debugger._stream, and Debugger.trimname.

| def __call__ | ( | self, | |
debug_level = 1, |
|||
msg = EMPTY_KWARG, |
|||
| args, | |||
| kwargs | |||
| ) |
Log to the current active handlers its message based on the bitwise `self._debugger_level`
value. Note, differently from the standard logging level, each logger object has its own
bitwise logging level, instead of all sharing the main `level`.
Definition at line 346 of file logger.py.
References Debugger._debugger_level, Debugger._log(), Debugger._log_clean(), Debugger.active(), and Debugger.clean_formatter.

| def active | ( | self | ) |
Works accordingly with super::hasHandlers(), except that this returns the activate
logger object if it has some activate handler, or None if there are not loggers with
active handlers.
The root logger is not returned, unless it is already setup with handlers.
Definition at line 178 of file logger.py.
Referenced by Debugger.__call__(), Debugger.basic(), Debugger.clean(), Debugger.clear(), Debugger.debug_level(), Debugger.exception(), and Debugger.setup().

| def addHandler | ( | self, | |
| handler | |||
| ) |
Override the super() method to correctly set up `sys.stderr/stdout` handlers.
When adding a new handler and either `sys.stderr` or `sys.stdout` is enabled. It is
required to check whether there is also a stream handler enabled, and if so, then, we
need to add a log record filter to avoid infinity log records trying to be displayed.
See also logging::Logger::addHandler().
Definition at line 1071 of file logger.py.
References Debugger._file, Debugger._file_context_filter, Debugger._has_file_context_filter, Debugger._stderr(), Debugger._stdout(), Debugger._stream, and Debugger.handle_stderr().
Referenced by Debugger.setup().


| def basic | ( | self, | |
debug_level = 1, |
|||
msg = EMPTY_KWARG, |
|||
| args, | |||
| kwargs | |||
| ) |
Prints the bitwise logging message with the standard basic formatter, which uses by
default the format: [%(name)s] %(asctime)s:%(msecs)010.6f %(tickDifference).2e %(message)s
The basic logger format can be configured setting the standard formatter with
setup() and calling invert() to set the `full_formatter` as
the basic formatter.
Definition at line 510 of file logger.py.
References Debugger._debugger_level, Debugger._log(), Debugger.active(), and Debugger.basic_formatter.

| def clean | ( | self, | |
debug_level = 1, |
|||
msg = EMPTY_KWARG, |
|||
| args, | |||
| kwargs | |||
| ) |
Prints a message without the time prefix as `[plugin_name.py] 11:13:51:0582059`
How to insert newline in python logging?
https://stackoverflow.com/questions/20111758/how-to-insert-newline-in-python-logging
Definition at line 397 of file logger.py.
References Debugger._debugger_level, Debugger._log(), Debugger._log_clean(), Debugger.active(), Debugger.basic_formatter, and Debugger.clean_formatter.

| def clear | ( | self, | |
delete = False |
|||
| ) |
Clear the log file contents.
@param `delete` if True, the log file will also be removed/deleted and the current file
handler will be removed.
Definition at line 607 of file logger.py.
References Debugger._stderr(), Debugger._stdout(), Debugger.active(), Debugger.handle_stderr(), and CleanLogRecord.name.
Referenced by SleepEvent.sleep().


| def debug_level | ( | self | ) |
Return this logger active debug level.
Definition at line 202 of file logger.py.
References Debugger._debugger_level.
| def debug_level | ( | self, | |
| debug_level | |||
| ) |
Set this current logger object active debug level.
Definition at line 209 of file logger.py.
References Debugger._arguments, Debugger._debugger_level, and Debugger.active().

| def deleteAllLoggers | ( | cls | ) |
Delete all loggers created by `getLogger()` calls.
Definition at line 1132 of file logger.py.
References Debugger.exception(), CleanLogRecord.name, and Debugger.removeHandlers().

| def exception | ( | self, | |
| msg, | |||
| args, | |||
| kwargs | |||
| ) |
Fix second indirection created by the super().error() method, by directly calling _log()
Definition at line 923 of file logger.py.
References Debugger._arguments, Debugger._create_formatter(), Debugger._current_tick, Debugger._last_tick, Debugger._log(), Debugger.active(), Debugger.getFormat(), and CleanLogRecord.name.
Referenced by Debugger.deleteAllLoggers(), Debugger.handle_stderr(), and Debugger.setup().


| def fix_children | ( | self, | |
| callable_action | |||
| ) |
When automatically creating loggers, some children logger can be setup before the
parent logger, if the children logger is instantiated on module level and its module
is imported before the parent logger to be setup.
Then this will cause the the both parent and child logger to be setup and have handlers
outputting data to theirs output stream. Hence, here we fix that by disabling the
children logger when they are setup before the parent logger.
This method is only called automatically by this module level function `getLogger()`
when is set to automatically setup the logger. If you are not using the automatic setup
you do not need to use this function because you should know what you are doing and how
you should setup your own loggers.
Definition at line 1184 of file logger.py.
References CleanLogRecord.name.
| def get_debug_file_path | ( | cls, | |
| file_path | |||
| ) |
Reliably detect Windows in Python
https://stackoverflow.com/questions/1387222/reliably-detect-windows-in-python
Convert "D:/User/Downloads/debug.txt"
To "/cygwin/D/User/Downloads/debug.txt"
To "/mnt/D/User/Downloads/debug.txt"
Definition at line 1213 of file logger.py.
References Debugger.remove_windows_driver_letter().
Referenced by Debugger.setup().


| def getRootLogger | ( | cls | ) |
Return the main root logger `root_debugger` used by this extension of the standard
logging module.
Definition at line 1255 of file logger.py.
References Debugger._frame_level.
| def handle_stderr | ( | self, | |
stderr = False, |
|||
stdout = False |
|||
| ) |
Register a exception hook if the logger is capable of logging them to alternate streams.
@param `stderr` if True, it will enable the logging hook on the sys.stderr.
@param `stdout` if True, it will enable the logging hook on the sys.stdout.
Definition at line 629 of file logger.py.
References Debugger._debug_level, Debugger._debugme, Debugger._file, Debugger._stream, Debugger.debug_level, Debugger.exception(), Debugger.handle_stderr(), Debugger.hasStreamHandlers(), CleanLogRecord.name, Debugger.removeHandler(), and Debugger.setup().
Referenced by Debugger.addHandler(), Debugger.clear(), Debugger.handle_stderr(), and Debugger.removeHandler().


| def hasStreamHandlers | ( | self | ) |
Return True if the current logger has some stream handler defined.
Definition at line 1171 of file logger.py.
Referenced by Debugger.handle_stderr().

| def invert | ( | self | ) |
Inverts the default formatter between the preconfigured `basic` and `full_formatter`.
Definition at line 623 of file logger.py.
References Debugger.basic_formatter, and Debugger.full_formatter.
| def makeRecord | ( | self, | |
| name, | |||
| level, | |||
| fn, | |||
| lno, | |||
| msg, | |||
| args, | |||
| exc_info, | |||
func = None, |
|||
extra = None |
|||
| ) |
A factory method which can be overridden in subclasses to create specialized LogRecords.
Definition at line 1360 of file logger.py.
References Debugger.trimname.
Referenced by Debugger.makeRecord().

| def makeRecord | ( | self, | |
| name, | |||
| level, | |||
| fn, | |||
| lno, | |||
| msg, | |||
| args, | |||
| exc_info, | |||
func = None, |
|||
extra = None, |
|||
sinfo = None |
|||
| ) |
A factory method which can be overridden in subclasses to create specialized LogRecords.
Definition at line 1375 of file logger.py.
References Debugger.makeRecord(), and Debugger.trimname.

| def new_line | ( | self, | |
debug_level = 1, |
|||
count = 1 |
|||
| ) |
Prints a clean new line, without any formatter header.
@param `count` how many new lines to output
Definition at line 338 of file logger.py.
References Debugger.clean.
| def newline | ( | self, | |
debug_level = 1, |
|||
count = 1 |
|||
| ) |
Prints a clean new line, without any formatter header.
@param `count` how many new lines to output
Definition at line 330 of file logger.py.
References Debugger.clean.
| def removeHandler | ( | self, | |
| handler | |||
| ) |
Override the super() method to correctly set up `sys.stderr/stdout` handlers.
When
See also logging::Logger::removeHandler().
Definition at line 1102 of file logger.py.
References Debugger._file, Debugger._file_context_filter, Debugger._has_file_context_filter, Debugger._stderr(), Debugger._stdout(), Debugger._stream, and Debugger.handle_stderr().
Referenced by Debugger.handle_stderr(), and Debugger.removeHandlers().


| def removeHandlers | ( | self | ) |
Delete all handlers registered to the current logger.
Definition at line 1161 of file logger.py.
References Debugger._debugme, Debugger._disable(), CleanLogRecord.name, and Debugger.removeHandler().
Referenced by Debugger.deleteAllLoggers(), and Debugger.reset().


| def reset | ( | self | ) |
Reset all remembered parameters values set on the subsequent calls to `setup()`.
Call this if you want to reset to remove all handlers and set all parameters values to
their default.
Definition at line 280 of file logger.py.
References Debugger._arguments, Debugger._formatter_arguments(), Debugger._reset(), Debugger._setup_formatter(), Debugger.clean_formatter, Debugger.full_formatter, Debugger.removeHandlers(), and Debugger.setup_basic().

| def setup | ( | self, | |
file = EMPTY_KWARG, |
|||
mode = EMPTY_KWARG, |
|||
delete = EMPTY_KWARG, |
|||
date = EMPTY_KWARG, |
|||
levels = EMPTY_KWARG, |
|||
function = EMPTY_KWARG, |
|||
name = EMPTY_KWARG, |
|||
time = EMPTY_KWARG, |
|||
msecs = EMPTY_KWARG, |
|||
tick = EMPTY_KWARG, |
|||
separator = EMPTY_KWARG, |
|||
formatter = EMPTY_KWARG, |
|||
rotation = EMPTY_KWARG, |
|||
| kwargs | |||
| ) |
If `file` parameter is passed, instead of output the debug to the standard output
stream, send it to a file on the file system, which is faster for large outputs.
As this function remembers most of its parameters passed from previous calls, you need to
explicitly pass `file=None` with `delete=True` if you want to disable the file
system output after setting up it to log to a file. See the function Debugger::reset()
for the default parameters values used on this setup utility.
If the parameters `date`, `levels`, `function`, `name`, `time`, `tick` and `msecs` are
nonempty strings, their value will be used to defining their configuration formatting.
For example, if you pass name="%(name)s: " the function name will be displayed as
`name: `, instead of the default `[name] `.
If you change your `sys.stderr` after creating an StreamHandler, you need to pass `handlers=True`
to make it to recreate the StreamHandler because of the old reference to `sys.stderr`.
Single page cheat-sheet about Python string formatting pyformat.info
https://github.com/ulope/pyformat.info
Override a method at instance level
https://stackoverflow.com/questions/394770/override-a-method-at-instance-level
@param `file` a relative or absolute path to the log file. If empty the output
will be sent to the standard output stream.
@param `mode` the file write mode on the file system (default `a`). It can be `a`
to append to the existent file, or `w` to erase the existent file
before start. If the parameter `rotation` is set to non zero, then
this will be an integer value setting how many backups are going to
be keep when doing the file rotation as specified on
logging::handlers::RotatingFileHandler documentation.
@param `delete` if True (default False), it will delete the other handler before
activate the current one, otherwise it will only activate the
selected handler. Useful for enabling multiple handlers
simultaneously.
@param `date` if True, add to the `full_formatter` the date on the format `%Y-%m-%d`.
@param `levels` if True, add to the `full_formatter` the log levels.
@param `function` if True, add to the `full_formatter` the function name.
@param `name` if True, add to the `full_formatter` the logger name.
@param `time` if True, add to the `full_formatter` the time on the format `%H:%M:%S:milliseconds.microseconds`.
@param `msecs` if True, add to the `full_formatter` the current milliseconds on the format ddd,ddddd.
@param `tick` if True, add to the `full_formatter` the time.perf_counter() difference from the last call.
@param `separator` if True, add to the `full_formatter` the a ` - ` to the end of the log record header.
@param `formatter` if not None, replace this `full_formatter` by the logging.Formatter() provided.
@param `rotation` if non zero, creates a RotatingFileHandler with the specified size
in Mega Bytes instead of FileHandler when creating a log file by the
`file` option. See logging::handlers::RotatingFileHandler for more
information. See the parameter `mode` to specify how many files at
most should be created by the rotation algorithm.
@param `handlers` if True (default False), it will force to create the handlers,
even if there are no changes on the current saved default parameters.
Its value is not saved between calls to this setup().
@param `stderr` if True (default True), it will install a listener to the `sys.stderr`
console output. This is useful for logging not handled exceptions.
@param `stdout` if True (default False), it will install a listener to the `sys.stdout`
console output. This is useful for logging all console output to a file.
@param `force` if an integer, set the `debug_level` into all created loggers hierarchy.
Its value is not saved between calls to this setup().
@param `active` if True (default True), it will search for any other active logger in
the current logger hierarchy and do the setup call on him. If no active
logger is found, it will do the setup on the current logger object,
Its value is not saved between calls to this setup().
@param `fast` if True (default False), it will disabled support to log message
calls as `log('message')` and `log(333)`, and it force all log
message calls to respect the format `log(1, message)`. This tradeoff
gains dropping from about 10 seconds to about 7 seconds each
10.000.000 log calls, when the logging debug level is set as
disabled.
@param `stream` (default sys.stderr), an file like object to the StreamHandler use
to print things when outputting results.
@param `trimname` (default 0), Remove these nth characters from the logger name
while creating the log record to print on the screen. Useful to keep
several loggers grouped together but hide their parent.
Definition at line 703 of file logger.py.
References Debugger.__class__, Debugger._arguments, Debugger._configure_force(), Debugger._create_file(), Debugger._disable(), Debugger._fast_basic(), Debugger._fast_clean(), Debugger._file, Debugger._get_time_prefix(), Debugger._old_basic, Debugger._old_clean, Debugger._setup(), Debugger._setup_fast_loggers(), Debugger._stream, Debugger.active(), Debugger.addHandler(), Debugger.basic, Debugger.clean, Debugger.exception(), Debugger.full_formatter, Debugger.get_debug_file_path(), and Debugger.trimname.
Referenced by Debugger.handle_stderr().


| def setup_basic | ( | self, | |
| kwargs | |||
| ) |
Configure the `basic_formatter` used by `basic()` logging function.
@param `**kwargs` the same formatting arguments passed to `setup()`
Definition at line 297 of file logger.py.
References Debugger._formatter_arguments(), Debugger._setup_formatter(), and Debugger.basic_formatter.
Referenced by Debugger.reset().


| def traceback | ( | self, | |
| kwargs | |||
| ) |
Prints the stack trace (traceback) until the current function call.
Definition at line 273 of file logger.py.
References Debugger._log().

| def warn | ( | self, | |
| msg, | |||
| args, | |||
| kwargs | |||
| ) |
Fix second indirection created by the super().warn() method, by directly calling _log()
Definition at line 915 of file logger.py.
References Debugger._log().
