--- a +++ b/arm_model/logger.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import unittest +import logging +# import os +# import sys +# from logging.handlers import RotatingFileHandler + +# try: +# LOG_FILENAME = os.path.splitext(__file__)[0] + ".log" +# except: +# LOG_FILENAME = os.getcwd() + "/logging.log" + + +class Singleton(object): + """ + Singleton interface: + http://www.python.org/download/releases/2.2.3/descrintro/#__new__ + """ + def __new__(cls, *args, **kwds): + it = cls.__dict__.get("__it__") + if it is not None: + return it + cls.__it__ = it = object.__new__(cls) + it.init(*args, **kwds) + return it + + def init(self, *args, **kwds): + pass + + +class LoggerManager(Singleton): + """ + Logger Manager. + Handles all logging files. + """ + + def init(self, loggername): + logging.basicConfig( + format='[%(asctime)s] [%(levelname)s] [@%(name)s] # %(message)s', + # format='[%(asctime)s] [@%(filename)s:%(lineno)ds] [%(levelname)-8s] # %(message)s', + datefmt='%F %H:%M:%S', + # filename='example.log', + level=logging.DEBUG) + self.logger = logging.getLogger(loggername) + + # rhandler = None + # try: + # rhandler = RotatingFileHandler( + # LOG_FILENAME, + # mode='a', + # maxBytes=10 * 1024 * 1024, + # backupCount=5 + # ) + # except: + # raise IOError("Couldn't create/open file \"" + + # LOG_FILENAME + "\". Check permissions.") + + # self.logger.setLevel(logging.DEBUG) + # formatter = logging.Formatter( + # fmt='[%(asctime)s] [%(filename)s:%(lineno)d] [%(levelname)-8s] %(message)s', + # datefmt='%F %H:%M:%S' + # ) + # rhandler.setFormatter(formatter) + # self.logger.addHandler(rhandler) + + def debug(self, loggername, msg): + self.logger = logging.getLogger(loggername) + self.logger.debug(msg) + + def error(self, loggername, msg): + self.logger = logging.getLogger(loggername) + self.logger.error(msg) + + def info(self, loggername, msg): + self.logger = logging.getLogger(loggername) + self.logger.info(msg) + + def warning(self, loggername, msg): + self.logger = logging.getLogger(loggername) + self.logger.warning(msg) + + +class Logger(object): + """ + Logger object. + """ + + def __init__(self, loggername="root"): + self.lm = LoggerManager(loggername) # LoggerManager instance + self.loggername = loggername # logger name + + def debug(self, msg): + self.lm.debug(self.loggername, msg) + + def error(self, msg): + self.lm.error(self.loggername, msg) + + def info(self, msg): + self.lm.info(self.loggername, msg) + + def warning(self, msg): + self.lm.warning(self.loggername, msg) + + +class TestLogger(unittest.TestCase): + + def test_creation(self): + logger = Logger() + logger.debug("this test") + + +if __name__ == '__main__': + unittest.main()