Init commit for standalone enodebd
Change-Id: I88eeef5135dd7ba8551ddd9fb6a0695f5325337b
diff --git a/logger.py b/logger.py
new file mode 100644
index 0000000..d0b67ca
--- /dev/null
+++ b/logger.py
@@ -0,0 +1,78 @@
+"""
+Copyright 2020 The Magma Authors.
+
+This source code is licensed under the BSD-style license found in the
+LICENSE file in the root directory of this source tree.
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+"""
+
+import logging
+from logging.handlers import RotatingFileHandler
+
+LOG_FILE = './enodebd.log'
+MAX_BYTES = 1024 * 1024 * 10 # 10MB
+BACKUP_COUNT = 5 # 10MB, 5 files, 50MB total
+
+
+class EnodebdLogger:
+ """
+ EnodebdLogger backs up debug logs with a RotatingFileHandler.
+
+ Debug logs will be propagated to root level if the root logger is set to
+ debug level.
+ """
+
+ _LOGGER = logging.getLogger(__name__) # type: logging.Logger
+
+ @staticmethod
+ def init() -> None:
+ if logging.root.level is not logging.DEBUG:
+ EnodebdLogger._LOGGER.propagate = False
+ handler = RotatingFileHandler(
+ LOG_FILE,
+ maxBytes=MAX_BYTES,
+ backupCount=BACKUP_COUNT,
+ )
+ formatter = logging.Formatter(fmt='%(asctime)s %(levelname)s %(message)s')
+ handler.setFormatter(formatter)
+ EnodebdLogger._LOGGER.addHandler(handler)
+ EnodebdLogger._LOGGER.setLevel(logging.DEBUG)
+
+ @staticmethod
+ def debug(msg, *args, **kwargs):
+ EnodebdLogger._LOGGER.debug(msg, *args, **kwargs)
+
+ @staticmethod
+ def info(msg, *args, **kwargs):
+ if not EnodebdLogger._LOGGER.propagate:
+ logging.info(msg, *args, **kwargs)
+ EnodebdLogger._LOGGER.info(msg, *args, **kwargs)
+
+ @staticmethod
+ def warning(msg, *args, **kwargs):
+ if not EnodebdLogger._LOGGER.propagate:
+ logging.warning(msg, *args, **kwargs)
+ EnodebdLogger._LOGGER.warning(msg, *args, **kwargs)
+
+ @staticmethod
+ def error(msg, *args, **kwargs):
+ if not EnodebdLogger._LOGGER.propagate:
+ logging.error(msg, *args, **kwargs)
+ EnodebdLogger._LOGGER.error(msg, *args, **kwargs)
+
+ @staticmethod
+ def exception(msg, *args, **kwargs):
+ if not EnodebdLogger._LOGGER.propagate:
+ logging.exception(msg, *args, **kwargs)
+ EnodebdLogger._LOGGER.exception(msg, *args, **kwargs)
+
+ @staticmethod
+ def critical(msg, *args, **kwargs):
+ if not EnodebdLogger._LOGGER.propagate:
+ logging.critical(msg, *args, **kwargs)
+ EnodebdLogger._LOGGER.critical(msg, *args, **kwargs)