12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
14
15
+ import datetime
16
+ import logging
15
17
import os
16
18
import sys
17
19
18
- import logging
19
- import datetime
20
20
import paddle .distributed as dist
21
21
22
22
_logger = None
@@ -39,22 +39,45 @@ def init_logger(name='ppcls', log_file=None, log_level=logging.INFO):
39
39
logging.Logger: The expected logger.
40
40
"""
41
41
global _logger
42
- assert _logger is None , "logger should not be initialized twice or more."
43
- _logger = logging .getLogger (name )
42
+
43
+ # solve mutiple init issue when using paddleclas.py and engin.engin
44
+ init_flag = False
45
+ if _logger is None :
46
+ _logger = logging .getLogger (name )
47
+ init_flag = True
44
48
45
49
formatter = logging .Formatter (
46
50
'[%(asctime)s] %(name)s %(levelname)s: %(message)s' ,
47
51
datefmt = "%Y/%m/%d %H:%M:%S" )
48
52
49
53
stream_handler = logging .StreamHandler (stream = sys .stdout )
50
54
stream_handler .setFormatter (formatter )
51
- _logger .addHandler (stream_handler )
55
+ stream_handler ._name = 'stream_handler'
56
+
57
+ # add stream_handler when _logger dose not contain stream_handler
58
+ for i , h in enumerate (_logger .handlers ):
59
+ if h .get_name () == stream_handler .get_name ():
60
+ break
61
+ if i == len (_logger .handlers ) - 1 :
62
+ _logger .addHandler (stream_handler )
63
+ if init_flag :
64
+ _logger .addHandler (stream_handler )
65
+
52
66
if log_file is not None and dist .get_rank () == 0 :
53
67
log_file_folder = os .path .split (log_file )[0 ]
54
68
os .makedirs (log_file_folder , exist_ok = True )
55
69
file_handler = logging .FileHandler (log_file , 'a' )
56
70
file_handler .setFormatter (formatter )
57
- _logger .addHandler (file_handler )
71
+ file_handler ._name = 'file_handler'
72
+
73
+ # add file_handler when _logger dose not contain same file_handler
74
+ for i , h in enumerate (_logger .handlers ):
75
+ if h .get_name () == file_handler .get_name () and \
76
+ h .baseFilename == file_handler .baseFilename :
77
+ break
78
+ if i == len (_logger .handlers ) - 1 :
79
+ _logger .addHandler (file_handler )
80
+
58
81
if dist .get_rank () == 0 :
59
82
_logger .setLevel (log_level )
60
83
else :
0 commit comments