Hi everyone,
A month ago I made a basic logging library: GitHub - josiahls/firehose for another package I’m developing that needed better logging.
This supports plugin:
- outputs, filters, and formatters similar to the python logging library.
Caveats:
- Hobby project of a hobby project
- Custom filters, outputs, and formatters need to be directly added to the library itself in each module’s init file at:
firehose/__init__.mojo
. Ideally we would just have a filter register function, or skip the need for variants altogether. - Duplicates the
Variant
struct for each module type to get union-like behavior. Ideas to get around this are welcome. - Not optimized for performance. I currently update it as the need arises.
Example use case
from firehose.logging import Logger
from firehose import (
DefaultLoggerFilter, DefaultLoggerFormatter, DefaultLoggerOutputer
)
fn main() raises:
"""Just run the logs and print them to visually validate the format."""
var logger = Logger("test", "INFO")
# Test all of the format fields
logger.add_formatter_copy(
DefaultLoggerFormatter(
'%(file)s:%(file_name)s:%(line)s:%(column)s %(logger_name)s - %(message_level)s - %(message_level_name)s - %(message_level_name_short)s: %(original_message)s'
)
)
logger.add_outputter_copy(DefaultLoggerOutputer())
logger.add_filter_copy(DefaultLoggerFilter()) # Default is INFO level
logger.trace("Test trace message")
logger.debug("Test debug message")
logger.info("Test message")
logger.warning("Test warning message")
logger.error("Test error message")
logger.critical("Test critical message")