forked from Tencent/NeuralNLP-NeuralClassifier
-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.py
99 lines (83 loc) · 2.8 KB
/
util.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env python
# coding:utf-8
"""
Tencent is pleased to support the open source community by making NeuralClassifier available.
Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
Licensed under the MIT License (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://opensource.org/licenses/MIT
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 thespecific language governing permissions and limitations under
the License.
"""
import logging
import sys
EPS = 1e-7
class Type(object):
@classmethod
def str(cls):
raise NotImplementedError
class ModeType(Type):
"""Standard names for model modes.
The following standard keys are defined:
* `TRAIN`: training mode.
* `EVAL`: evaluation mode.
* `PREDICT`: inference mode.
"""
TRAIN = 'train'
EVAL = 'eval'
PREDICT = 'infer'
@classmethod
def str(cls):
return ",".join([cls.TRAIN, cls.EVAL, cls.PREDICT])
class Logger(object):
_instance = None
def __new__(cls, *args, **kw):
if not cls._instance:
cls._instance = super(Logger, cls).__new__(cls)
return cls._instance
def __init__(self, config):
if config.log.log_level == "debug":
logging_level = logging.DEBUG
elif config.log.log_level == "info":
logging_level = logging.INFO
elif config.log.log_level == "warn":
logging_level = logging.WARN
elif config.log.log_level == "error":
logging_level = logging.ERROR
else:
raise TypeError(
"No logging type named %s, candidate is: info, debug, error")
logging.basicConfig(filename=config.log.logger_file,
level=logging_level,
format='%(asctime)s : %(levelname)s %(message)s',
filemode="a", datefmt='%Y-%m-%d %H:%M:%S')
@staticmethod
def debug(msg):
"""Log debug message
msg: Message to log
"""
logging.debug(msg)
sys.stdout.write(msg + "\n")
@staticmethod
def info(msg):
""""Log info message
msg: Message to log
"""
logging.info(msg)
sys.stdout.write(msg + "\n")
@staticmethod
def warn(msg):
"""Log warn message
msg: Message to log
"""
logging.warning(msg)
sys.stdout.write(msg + "\n")
@staticmethod
def error(msg):
"""Log error message
msg: Message to log
"""
logging.error(msg)
sys.stderr.write(msg + "\n")