logs (module)

Logger setup for python projects

Author

David Young

Classes

GroupWriteRotatingFileHandler(filename[, …])

rotating file handler for logging

emptyLogger()

A fake logger object so user can set ``log=False`` if required

object()

The most base type

Functions

console_logger([level])

Setup and return a console logger

setup_dryx_logging(yaml_file)

setup dryx style python logging

Sub-modules

GroupWriteRotatingFileHandler(filename[, …])

rotating file handler for logging

coloredlogs

Colored terminal output for Python’s logging module.

console_logger([level])

Setup and return a console logger

emptyLogger()

A fake logger object so user can set ``log=False`` if required

handlers

Additional handlers for the logging package for Python.

logging

Logging package for Python.

object()

The most base type

os

OS routines for NT or Posix depending on what system we’re on.

setup_dryx_logging(yaml_file)

setup dryx style python logging

sys

This module provides access to some objects used or maintained by the interpreter and to functions that interact strongly with the interpreter.

class GroupWriteRotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)[source]

Bases: logging.handlers.RotatingFileHandler

rotating file handler for logging

acquire()[source]

Acquire the I/O thread lock.

addFilter(filter)[source]

Add the specified filter to this handler.

close()[source]

Closes the stream.

createLock()[source]

Acquire a thread lock for serializing access to the underlying I/O.

doRollover()[source]

Do a rollover, as described in init().

emit(record)[source]

Emit a record.

Output the record to the file, catering for rollover as described in doRollover().

filter(record)[source]

Determine if a record is loggable by consulting all the filters.

The default is to allow the record to be logged; any filter can veto this and the record is then dropped. Returns a zero value if a record is to be dropped, else non-zero.

Changed in version 3.2: Allow filters to be just callables.

flush()[source]

Flushes the stream.

format(record)[source]

Format the specified record.

If a formatter is set, use it. Otherwise, use the default formatter for the module.

get_name()[source]
handle(record)[source]

Conditionally emit the specified logging record.

Emission depends on filters which may have been added to the handler. Wrap the actual emission of the record with acquisition/release of the I/O thread lock. Returns whether the filter passed the record for emission.

handleError(record)[source]

Handle errors which occur during an emit() call.

This method should be called from handlers when an exception is encountered during an emit() call. If raiseExceptions is false, exceptions get silently ignored. This is what is mostly wanted for a logging system - most users will not care about errors in the logging system, they are more interested in application errors. You could, however, replace this with a custom handler if you wish. The record which was being processed is passed in to this method.

release()[source]

Release the I/O thread lock.

removeFilter(filter)[source]

Remove the specified filter from this handler.

rotate(source, dest)[source]

When rotating, rotate the current log.

The default implementation calls the ‘rotator’ attribute of the handler, if it’s callable, passing the source and dest arguments to it. If the attribute isn’t callable (the default is None), the source is simply renamed to the destination.

Parameters
  • source – The source filename. This is normally the base filename, e.g. ‘test.log’

  • dest – The destination filename. This is normally what the source is rotated to, e.g. ‘test.log.1’.

rotation_filename(default_name)[source]

Modify the filename of a log file when rotating.

This is provided so that a custom filename can be provided.

The default implementation calls the ‘namer’ attribute of the handler, if it’s callable, passing the default name to it. If the attribute isn’t callable (the default is None), the name is returned unchanged.

Parameters

default_name – The default name for the log file.

setFormatter(fmt)[source]

Set the formatter for this handler.

setLevel(level)[source]

Set the logging level of this handler. level must be an int or a str.

setStream(stream)[source]

Sets the StreamHandler’s stream to the specified value, if it is different.

Returns the old stream, if the stream was changed, or None if it wasn’t.

set_name(name)[source]
shouldRollover(record)[source]

Determine if rollover should occur.

Basically, see if the supplied record would cause the file to exceed the size limit we have.

property name[source]
terminator = '\n'[source]
class emptyLogger[source]

Bases: object

A fake logger object so user can set ``log=False`` if required

Usage

if log == False:
    from fundamentals.logs import emptyLogger
    log = emptyLogger()
critical(argu)[source]
debug(argu)[source]
error(argu)[source]
info(argu)[source]
warning(argu)[source]
console_logger(level='WARNING')[source]

Setup and return a console logger

Key Arguments

  • level – the level of logging required

Return

  • logger – the console logger

Usage

from fundamentals import logs
log = logs.console_logger(
    level="DEBUG"
)
log.debug("Testing console logger")
setup_dryx_logging(yaml_file)[source]

setup dryx style python logging

Key Arguments

  • level – the level of logging required

Return

  • logger – the console logger

Usage

from fundamentals import logs
log = logs.setup_dryx_logging(
    yaml_file="/Users/Dave/.config/fundamentals/fundamentals.yaml"
)
log.error("test error")

Here is an example of the settings in the yaml file:

version: 1

logging settings:
    formatters:
        file_style:
            format: '* %(asctime)s - %(name)s - %(levelname)s (%(pathname)s > %(funcName)s > %(lineno)d) - %(message)s  '
            datefmt: '%Y/%m/%d %H:%M:%S'
        console_style:
            format: '* %(asctime)s - %(levelname)s: %(pathname)s:%(funcName)s:%(lineno)d > %(message)s'
            datefmt: '%H:%M:%S'
        html_style:
            format: '<div id="row" class="%(levelname)s"><span class="date">%(asctime)s</span>   <span class="label">file:</span><span class="filename">%(filename)s</span>   <span class="label">method:</span><span class="funcName">%(funcName)s</span>   <span class="label">line#:</span><span class="lineno">%(lineno)d</span> <span class="pathname">%(pathname)s</span>  <div class="right"><span class="message">%(message)s</span><span class="levelname">%(levelname)s</span></div></div>'
            datefmt: '%Y-%m-%d <span class= "time">%H:%M <span class= "seconds">%Ss</span></span>'
    handlers:
        console:
            class: logging.StreamHandler
            level: DEBUG
            formatter: console_style
            stream: ext://sys.stdout
        file:
            class: logging.handlers.GroupWriteRotatingFileHandler
            level: WARNING
            formatter: file_style
            filename: /Users/Dave/.config/fundamentals/fundamentals.log
            mode: w+
            maxBytes: 102400
            backupCount: 1
    root:
        level: WARNING
        handlers: [file,console]