Commit a63f2ed3 authored by liuzhe-lz's avatar liuzhe-lz Committed by QuanluZhang
Browse files

Improve logging for standalone mode (#1768)

parent dbf98714
......@@ -68,6 +68,27 @@ def init_logger(logger_file_path, log_level_name='info'):
sys.stdout = _LoggerFileWrapper(logger_file)
def init_standalone_logger():
"""
Initialize root logger for standalone mode.
This will set NNI's log level to INFO and print its log to stdout.
"""
fmt = '[%(asctime)s] %(levelname)s (%(name)s) %(message)s'
formatter = logging.Formatter(fmt, _time_format)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter)
nni_logger = logging.getLogger('nni')
nni_logger.addHandler(handler)
nni_logger.setLevel(logging.INFO)
nni_logger.propagate = False
# Following line does not affect NNI loggers, but without this user's logger won't be able to
# print log even it's level is set to INFO, so we do it for user's convenience.
# If this causes any issue in future, remove it and use `logging.info` instead of
# `logging.getLogger('xxx')` in all examples.
logging.basicConfig()
_multi_thread = False
_multi_phase = False
......
......@@ -22,14 +22,26 @@
import logging
import json_tricks
from ..common import init_standalone_logger
# print INFO log to stdout
logging.basicConfig()
logging.getLogger('nni').setLevel(logging.INFO)
__all__ = [
'get_next_parameter',
'get_experiment_id',
'get_trial_id',
'get_sequence_id',
'send_metric',
]
init_standalone_logger()
_logger = logging.getLogger('nni')
def get_next_parameter():
pass
_logger.warning('Requesting parameter without NNI framework, returning empty dict')
return {
'parameter_id': None,
'parameters': {}
}
def get_experiment_id():
pass
......@@ -43,6 +55,8 @@ def get_sequence_id():
def send_metric(string):
metric = json_tricks.loads(string)
if metric['type'] == 'FINAL':
print('Final result:', metric['value'])
_logger.info('Final result: %s', metric['value'])
elif metric['type'] == 'PERIODICAL':
print('Intermediate result:', metric['value'])
_logger.info('Intermediate result: %s (Index %s)', metric['value'], metric['sequence'])
else:
_logger.error('Unexpected metric: %s', string)
......@@ -126,9 +126,10 @@ def report_intermediate_result(metric):
serializable object.
"""
global _intermediate_seq
assert _params is not None, 'nni.get_next_parameter() needs to be called before report_intermediate_result'
assert _params or trial_env_vars.NNI_PLATFORM is None, \
'nni.get_next_parameter() needs to be called before report_intermediate_result'
metric = json_tricks.dumps({
'parameter_id': _params['parameter_id'],
'parameter_id': _params['parameter_id'] if _params else None,
'trial_job_id': trial_env_vars.NNI_TRIAL_JOB_ID,
'type': 'PERIODICAL',
'sequence': _intermediate_seq,
......@@ -147,9 +148,10 @@ def report_final_result(metric):
metric:
serializable object.
"""
assert _params is not None, 'nni.get_next_parameter() needs to be called before report_final_result'
assert _params or trial_env_vars.NNI_PLATFORM is None, \
'nni.get_next_parameter() needs to be called before report_final_result'
metric = json_tricks.dumps({
'parameter_id': _params['parameter_id'],
'parameter_id': _params['parameter_id'] if _params else None,
'trial_job_id': trial_env_vars.NNI_TRIAL_JOB_ID,
'type': 'FINAL',
'sequence': 0,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment