I usually use Bash for fairly trivial and/or ad-hoc tasks. But sometimes when a Bash program become complex, leveled logging can be useful for debugging and monitoring program states. By leveled logging, I mean printing messages grouped by different tags such as DEBUG and INFO and controlling which of the groups are printed by a "level" parameter. This is roughly what's supported by java.util.logging.Level and org.apache.log4j.Level in Java.

To do this in Bash, I simply defined a set of level constants that is the union of the two schemes given above:

LEVEL java.util.logging.Level org.apache.log4j.Level
9 (off) (off)
8 n/a FATAL
7 SEVERE ERROR
6 WARNING WARN
5 INFO INFO
4 CONFIG n/a
3 FINE DEBUG
2 FINER TRACE
1 FINEST ALL

Direct data download

and define a mengLog function that print a message if the message's logging level is same or higher than a global logging level $mengLOGGING_LEVEL. So the logging level can be understood as an indication of priority, the higher the level is, the higher the priority. For instance, when $mengLOGGING_LEVEL=6, messages with level equal or higher than 6 has an enough priority or even higher priority to be printed, and therefore, WARNING/WARN, SEVERE/ERROR, FATAL messages are printed in the example leveled-logging_example.sh.

Code:

Comments on this page are closed.
blog comments powered by Disqus