logger refactoring

This commit is contained in:
Matthias Bisping 2022-03-16 14:00:08 +01:00
parent 49e113f8d8
commit 0e004cbd21
4 changed files with 35 additions and 10 deletions

View File

@ -5,6 +5,7 @@ webserver:
service:
logging_level: $LOGGING_LEVEL_ROOT|DEBUG # Logging level for service logger
progressbar: True # Whether a progress bar over the pages of a document is displayed while processing
batch_size: $BATCH_SIZE|32 # Number of images in memory simultaneously
verbose: $VERBOSE|True # Service prints document processing progress to stdout
run_id: $RUN_ID|fabfb1f192c745369b88cab34471aba7 # The ID of the mlflow run to load the model from

View File

@ -1,13 +1,10 @@
import logging
from typing import Callable
from flask import Flask, request, jsonify
from image_prediction.config import CONFIG
logger = logging.getLogger(__name__)
logger.setLevel(CONFIG.service.logging_level)
from image_prediction.utils import get_logger
logger = get_logger()
def make_prediction_server(predict_fn: Callable):

View File

@ -1,4 +1,3 @@
import logging
from itertools import chain
from operator import itemgetter
from typing import List, Dict, Iterable
@ -7,12 +6,14 @@ import numpy as np
from image_prediction.config import CONFIG
from image_prediction.locations import MLRUNS_DIR, BASE_WEIGHTS
from image_prediction.utils import temporary_pdf_file
from image_prediction.utils import temporary_pdf_file, get_logger
from incl.redai_image.redai.redai.backend.model.model_handle import ModelHandle
from incl.redai_image.redai.redai.backend.pdf.image_extraction import extract_and_stitch
from incl.redai_image.redai.redai.utils.mlflow_reader import MlflowModelReader
from incl.redai_image.redai.redai.utils.shared import chunk_iterable
logger = get_logger()
class Predictor:
"""`ModelHandle` wrapper. Forwards to wrapped model handle for prediction and produces structured output that is
@ -37,7 +38,7 @@ class Predictor:
self.classes_readable = np.array(self.model_handle.classes)
self.classes_readable_aligned = self.classes_readable[self.classes[list(range(len(self.classes)))]]
except Exception as e:
logging.info(f"Service estimator initialization failed: {e}")
logger.info(f"Service estimator initialization failed: {e}")
def __make_predictions_human_readable(self, probs: np.ndarray) -> List[Dict[str, float]]:
"""Translates an n x m matrix of probabilities over classes into an n-element list of mappings from classes to
@ -89,9 +90,9 @@ class Predictor:
return predictions if probabilities else classes
def predict_pdf(self, pdf):
def predict_pdf(self, pdf, verbose=False):
with temporary_pdf_file(pdf) as pdf_path:
image_metadata_pairs = self.__extract_image_metadata_pairs(pdf_path)
image_metadata_pairs = self.__extract_image_metadata_pairs(pdf_path, verbose=verbose)
return self.__predict_images(image_metadata_pairs)
def __predict_images(self, image_metadata_pairs: Iterable, batch_size: int = CONFIG.service.batch_size):

View File

@ -1,9 +1,35 @@
import logging
import tempfile
from contextlib import contextmanager
from image_prediction.config import CONFIG
@contextmanager
def temporary_pdf_file(pdf: bytes):
with tempfile.NamedTemporaryFile() as f:
f.write(pdf)
yield f.name
def make_logger_getter():
logger = logging.getLogger("imgclf")
logger.propagate = False
handler = logging.StreamHandler()
handler.setLevel(CONFIG.service.logging_level)
log_format = "[%(levelname)s]: %(message)s"
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)
logger.addHandler(handler)
def get_logger():
return logger
return get_logger
get_logger = make_logger_getter()