I was looking at the Python logging library as I needed to create 2 log files for different logging purposes. I ended up creating the following Python log functions.
#!/usr/bin/env python import logging LOG_FILE_ONE = "/var/log/one.log" LOG_FILE_TWO = "/var/log/two.log" def main(): setup_logger('log_one', LOG_FILE_ONE) setup_logger('log_two', LOG_FILE_TWO) logger('Logging out to log one...', 'info', 'one') logger('Logging out to log two...', 'warning', 'two') def setup_logger(logger_name, log_file, level=logging.INFO): log_setup = logging.getLogger(logger_name) formatter = logging.Formatter('%(levelname)s: %(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') fileHandler = logging.FileHandler(log_file, mode='a') fileHandler.setFormatter(formatter) streamHandler = logging.StreamHandler() streamHandler.setFormatter(formatter) log_setup.setLevel(level) log_setup.addHandler(fileHandler) log_setup.addHandler(streamHandler) def logger(msg, level, logfile): if logfile == 'one' : log = logging.getLogger('log_one') if logfile == 'two' : log = logging.getLogger('log_two') if level == 'info' : log.info(msg) if level == 'warning' : log.warning(msg) if level == 'error' : log.error(msg) if __name__ == "__main__": main()
In the main() function, we set up a logging instance. We do this for both LOG_FILE_ONE and LOG_FILE_TWO.
setup_logger('log_one', LOG_FILE_ONE) setup_logger('log_two', LOG_FILE_TWO)
This uses standard logging python library. The formatter is important as that is how the log entries look in the log file (below). Here is mine:
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
Have a look at this online doc from Python.org for more info on the formatter method.
https://docs.python.org/2/library/logging.html#formatter-objects
Once we set up the logging instance, including the file streamer and handler, we can then use those instances, in this case log_one or log_two.
Both have different log file paths /var/log/{one.log,two.log}.
We then call the logging function, telling it what logging instance to use (log_one or log_two) and we also pass in what log level we want (info, warn, debug).
logger('Logging out to log one...', 'info', 'one') logger('Logging out to log two...', 'warn', 'two')
Interesting, we get this output when we run this script.
INFO: 01/01/2016 01:01:01 AM Logging out to log one…
Notice we do not get WARNING being logged.
That is because of this:
def setup_logger(logger_name, log_file, level=logging.INFO):
Change level=logging.WARN, and this happens:
INFO: 01/01/2016 01:01:01 AM Logging out to log one...
WARNING: 01/01/2016 01:01:01 PM Logging out to log two...
So, pretty handy and you can create as many log files as you need…