An ugly, slow Logger class for python
- match .. case .. is introduced in 3.10 and I am not interested in supporting older releases
- I am not an expert on Python
- It is not thread-safe
- I don't know what happens if two instances are created with the same name, and I don't care. I'd never do that
- The solo purpose is to have an easy to use and easy to read logger class
- it is easy to use and easy to read
- I may keep this library up-to-date and even optimize it in the future
- at least it has a CI/CD pipeline
pip install uglylogger
# A logger which can log both to console and to a file
logger = Logger("name", "file.log")
# A logger which can only log to console
logger = Logger("name")
logger.release()
- Releases the resources, it's safe to delete the log file after calling this method
logger.set_color_mode(LogColorMode.COLORED)
- coloroed output if the console/terminal supports it
logger.set_color_mode(LogColorMode.MONO)
- no color used for the console/terminal output
logger.console("Message", color=LogColor.BLACK, level=LogLevel.DEBUG)
- color and level are optional
- if not provided, default color is BLACK
- if not provided, default level is DEBUG
logger.file("Message", level=LogLevel.DEBUG)
- level is optional
- if not provided, default level is DEBUG
- if instantiated without a file name, nothing happens
logger.log("Message", color=LogColor.BLACK, level=LogLevel.DEBUG, output=LogOutput.ALL)
- color, level and output are optional
- if not provided, default color is BLACK
- if not provided, default level is DEBUG
- if not provided, default output is ALL
- if instantiated without a file name, writing to file is ignored
logger.debug("Message", color=LogColor.BLACK, output=LogOutput.ALL)
logger.info("Message", color=LogColor.BLACK, output=LogOutput.ALL)
logger.warning("Message", color=LogColor.BLACK, output=LogOutput.ALL)
logger.error("Message", color=LogColor.BLACK, output=LogOutput.ALL)
logger.critical("Message", color=LogColor.BLACK, output=LogOutput.ALL)
- BLACK
- RED
- GREEN
- YELLOW
- BLUE
- MAGENTA
- CYAN
- WHITE
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
- NONE
- CONSOLE
- FILE
- ALL
logger.set_format([
...
LogFormatBlock.XXX
...
])
- NAME
- LEVEL
- DATETIME
- MESSAGE
- FILE
- LINE
- FUNCTION
logger.set_format([LogFormatBlock.MESSAGE])
logger.console("Hello World!")
# Output : Hello World!
logger.set_format([
"[",
LogFormatBlock.LEVEL,
"] ",
LogFormatBlock.MESSAGE]
)
logger.console("Hello World!")
# Output : [DEBUG] Hello World!
logger.move(new_file: str, option: LogMoveOption)
# Output : Hello World!
- MOVE_AND_APPEND
Moves the log file to the destination
Deletes if there's already a file in the destination
Appends to the moved file
Old file is obviously deleted
- COPY_AND_APPEND
Copies the log file to the destination
Deletes if there's already a file in the destination
Appends to the moved file
Old file is obviously remains
- KEEP_AND_APPEND
Keeps the old log file
Appends if there's already a file in the destination
Creates a new file if not
- KEEP_AND_INIT
Keeps the old log file
Creates a new file in the destination
- DELETE_AND_INIT
Deletes the old log file
Creates a new file in the destination