--- 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()