Skip to content

Commit e2e116e

Browse files
authored
[V2 Logger] factory (#1537)
* factory * docstring
1 parent 9ddeb0c commit e2e116e

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing,
10+
# software distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
from typing import TYPE_CHECKING, Any, Dict
17+
18+
from .root_logger import LogType, MetricLogger, PerformanceLogger, SystemLogger
19+
from .utils import import_from_path, import_from_registry
20+
21+
22+
if TYPE_CHECKING:
23+
from deepsparse.loggers_v2.registry.loggers.base_logger import BaseLogger
24+
25+
26+
ROOT_LOGGER_DICT = {
27+
"system": SystemLogger,
28+
"performance": PerformanceLogger,
29+
"metric": MetricLogger,
30+
}
31+
32+
33+
class LoggerFactory:
34+
"""
35+
Factory to obtain root logger entrypoints given config file
36+
37+
self.leaf_logger # dict{key=logger_id, value=instantiated logger obj}
38+
self.root_logger_factory # dict{key=str, value=RootLogger}
39+
self.logger # dict{key=LOG_TYPE.enum, value=RootLogger}
40+
41+
"""
42+
43+
def __init__(self, config: Dict[str, Dict]):
44+
self.config = config
45+
46+
self.leaf_logger = {}
47+
self.root_logger_factory = {}
48+
self.logger = {}
49+
50+
self.build_leaf_logger()
51+
self.build_root_logger()
52+
53+
self.create()
54+
55+
def build_leaf_logger(
56+
self,
57+
) -> None:
58+
"""
59+
Build the leaf logegr singleton
60+
61+
Notes:
62+
name is the uuid of the logger, ex. default for
63+
PythonLogger (specified by the user)
64+
65+
"""
66+
logger_config = self.config.get("logger")
67+
for name, init_args in logger_config.items():
68+
self.leaf_logger[name] = self.instantiate_logger(
69+
name=init_args.pop("name"),
70+
init_args=init_args,
71+
)
72+
73+
def build_root_logger(self) -> None:
74+
"""
75+
Build the root logger factory instantiating the
76+
root loggers with the leaf logger singleton and
77+
its section of the config file
78+
79+
"""
80+
81+
for log_type, logger in ROOT_LOGGER_DICT.items():
82+
log_type_args = self.config.get(log_type)
83+
if log_type_args is not None:
84+
self.root_logger_factory[log_type] = logger(
85+
config=self.config[log_type],
86+
leaf_logger=self.leaf_logger,
87+
)
88+
89+
def create(self) -> None:
90+
"""Create the entrypoints to access the root loggers"""
91+
92+
self.logger = {
93+
LogType.SYSTEM: self.root_logger_factory.get("system"),
94+
LogType.PERFORMANCE: self.root_logger_factory.get("performance"),
95+
LogType.METRIC: self.root_logger_factory.get("metric"),
96+
}
97+
98+
def instantiate_logger(
99+
self, name: str, init_args: Dict[str, Any] = {}
100+
) -> BaseLogger:
101+
"""
102+
Instiate the logger from `name`, a path or the name of BaseLogger
103+
in the registry. Path example: path/to/file.py:LoggerName
104+
105+
"""
106+
if ":" in name:
107+
# Path example: path/to/file.py:LoggerName
108+
logger = import_from_path(path=name)
109+
return logger(**init_args)
110+
111+
logger = import_from_registry(name)
112+
return logger(**init_args)

0 commit comments

Comments
 (0)