Source code for draugr.writers.log_writer
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import logging
import sys
from typing import Any
from apppath import ensure_existence
from draugr import PROJECT_APP_PATH
from draugr.writers.writer import Writer
__author__ = "Christian Heider Nielsen"
__doc__ = """
Created on 27/04/2019
@author: cnheider
"""
__all__ = ["LogWriter"]
from pathlib import Path
[docs]class LogWriter(Writer):
"""description"""
def _scalar(self, tag: str, value: float, step: int) -> None:
self.logger.info(f"{step} [{tag}] {value}")
[docs] @staticmethod
def get_logger(
path: Path = Path.cwd() / "0.log",
write_to_std_out: bool = False,
) -> logging.Logger:
"""
:param path:
:type path:
:param write_to_std_out:
:type write_to_std_out:
:return:
:rtype:"""
ensure_existence(path, declare_file=True, overwrite_on_wrong_type=True)
handlers = [logging.FileHandler(filename=str(path))]
if write_to_std_out:
handlers.append(logging.StreamHandler(sys.stdout))
logging.basicConfig(level=logging.INFO, format="%(message)s", handlers=handlers)
return logging.getLogger()
[docs] def __init__(self, path, **kwargs):
super().__init__(**kwargs)
self.log_path = path
self.logger: logging.Logger = None
def _open(self) -> Any:
self.logger = self.get_logger(self.log_path)
return self
def _close(self, exc_type=None, exc_val=None, exc_tb=None) -> None:
del self.logger
def __getattr__(self, item) -> Any:
return getattr(self.logger, item)
def __call__(self, msg: str) -> None:
self.logger.info(msg)
[docs] def text(self, msg: str) -> None:
"""
:param msg:
"""
self(msg)
[docs] def log(self, msg: str) -> None:
"""
:param msg:
"""
self(msg)
if __name__ == "__main__":
with LogWriter(PROJECT_APP_PATH.user_log / "test") as w:
w.scalar("What", 4)