Last updated:
0 purchases
bbutils 0.7.0.0
bbutils
Collection of code I use frequently in many of my projects. Especially the logging feature.
Features
Logging to console (colored) and file, in can be extended via additional writer via a plugin feature. The logging is done directly, but also can be done via a thread and a simple buffer.
Installation
You can install unqlite using pip.
pip install bbutils
Basic logging usage
Below is a sample designed to show some of the basic features and functionality of the logging library.
Step 1: Setup
To begin, instantiate an Logging object. Then do the setup via log.setup(**kwargs).
log = Logging()
log.setup(app="example", level=3)
Possible values for setup():
app: Application name
use_thread: use threaded output
interval: update interval for threaded mode in seconds
level: verbose level (integer)
index: dictionay with a lookup table for the different commands for each verbose level
Verbose level and the commands
index = {
0: ["INFORM", "WARN", "ERROR", "EXCEPTION", "TIMER", "PROGRESS"],
1: ["INFORM", "DEBUG1", "WARN", "ERROR", "EXCEPTION", "TIMER", "PROGRESS"],
2: ["INFORM", "DEBUG1", "DEBUG1", "WARN", "ERROR", "EXCEPTION", "TIMER", "PROGRESS"],
3: ["INFORM", "DEBUG1", "DEBUG2", "DEBUG3", "WARN", "ERROR", "EXCEPTION", "TIMER", "PROGRESS"]
}
Step 2: Output writer
console
file
# We want console and file logging
console = log.get_writer("console")
fileio = log.get_writer("file")
# file name to log to
filename = os.path.abspath(os.path.normpath("{0:s}/run-tests.log".format(os.getcwd())))
# setup file and console output, set filename and filler for space for readable output.
console.setup(text_space=15)
fileio.setup(text_space=15, filename=filename)
Possible values for console.setup():
text_space: number of space fillers for application name and tag
seperator: seperator for tags and content, currently '|' as default
error_index: list of commands (see Verbose level and the commands) redirected to stderr
bar_len: length of progress bar
Possible values for file.setup():
There are two modes for the file output. First is setting the filename directly. The second is setting filename, logname and logpath. The second enables to append a date and time value to the output filename.
text_space: number of space fillers for application name and tag
append_data: continue old logfile (only for filename)
filename: filename for logfile (excludes logname, logpath and append_datetime)
logname: general name for logfile (example logname=example will result in a filename of /exaple_2020-01-01_00.00.00.log)
logpath: path to store the logfile, works only with logname
append_datetime: add datetime to logname and logpath
Step 3: Register writer
Its possible to create self written writer and use these. Look in bbutil.logging.types for the Writer class and the Message class.
# register the output
log.register(console)
log.register(fileio)
Step 4: Use the class
inform(tag: str, content: str)
warn(tag: str, content: str)
debug1(tag: str, content: str)
debug2(tag: str, content: str)
debug3(tag: str, content: str)
error(content: str)
exception(e: Exception)
traceback()
progress(limit: int, interval: int = 0)
timer(content: str)
Example for 'inform'
log.inform("EXAMPLE", "example 1, this will be shown with every log level")
example EXAMPLE | example 1, this will be shown with every log level
example.py
See file here
import os
import time
from bbutil.logging import Logging
if __name__ == '__main__':
log = Logging()
# Setup the logging, appicatio name is 'example', log level is 2
log.setup(app="example", level=3)
# We want console and file logging
console = log.get_writer("console")
fileio = log.get_writer("file")
# file name to log to
filename = os.path.abspath(os.path.normpath("{0:s}/run-tests.log".format(os.getcwd())))
# setup file and console output, set filename and filler for space for readable output.
console.setup(text_space=15)
fileio.setup(text_space=15, filename=filename)
# register the output
log.register(console)
log.register(fileio)
# switch logging on
log.open()
# example 1, this will be shown with every log level
log.inform("EXAMPLE", "example 1, this will be shown with every log level")
# example 2, this will be shown with every log level
log.warn("EXAMPLE", "this will be shown with every log level")
# error example, this will be shown with every log level
log.error("this will be shown with every log level!")
# debug 1 example, this will be shown only with log level 1 and above
log.debug1("DEBUG", "this will be shown only with log level 1 and above")
# debug 2 example, this will be shown only with log level 2 and above
log.debug2("DEBUG", "this will be shown only with log level 2 and above")
# debug 3 example, this will be shown only with log level 3
log.debug3("DEBUG", "this will be shown only with log level 3")
# show exceptions, this will be shown with every log level
log.inform("EXCEPTIONS", "this will be shown with every log level")
try:
_ = 1 / 0
except ZeroDivisionError as e:
log.exception(e)
# show traceback, this will be shown with every log level
log.inform("TRACEBACK", "this will be shown with every log level")
try:
_ = 1 / 0
except ZeroDivisionError:
log.traceback()
# show a progress meter via console
# first parameter: limit of the counter
# second parameter: update interval
# the update interval is there to prevent flickering, it also reduces the load
log.inform("PROGRESS", "count from 0 to 1000 in 10 interval, set the value via set()")
count1 = 0
progress1 = log.progress(1000, 10)
while True:
progress1.set(count1)
time.sleep(0.0001)
count1 += 1
if count1 > 1000:
break
# to remove the progress bar use clear
log.clear()
# it also can be used backwards
log.inform("PROGRESS", "count from 1000 to 0 in 10 interval, set the value via set()")
count2 = 1000
progress2 = log.progress(1000, 10)
progress2._counter = 1000
while True:
progress2.set(count2)
time.sleep(0.0001)
count2 -= 1
if count2 == 0:
break
# to remove the progress bar use clear
log.clear()
# now we use inc instead of setting the value
log.inform("PROGRESS", "count from 0 to 1000 in 10 interval, set the value via inc()")
count3 = 0
progress3 = log.progress(1000, 10)
while True:
progress3.inc()
time.sleep(0.0001)
count3 += 1
if count3 > 1000:
break
# to remove the progress bar use clear
log.clear()
log.inform("MEASURE", "Measure time.sleep(3)")
timer1 = log.timer("Measure something")
time.sleep(3)
timer1.stop()
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.