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'): ...@@ -68,6 +68,27 @@ def init_logger(logger_file_path, log_level_name='info'):
sys.stdout = _LoggerFileWrapper(logger_file) 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_thread = False
_multi_phase = False _multi_phase = False
......
...@@ -22,14 +22,26 @@ ...@@ -22,14 +22,26 @@
import logging import logging
import json_tricks import json_tricks
from ..common import init_standalone_logger
# print INFO log to stdout __all__ = [
logging.basicConfig() 'get_next_parameter',
logging.getLogger('nni').setLevel(logging.INFO) 'get_experiment_id',
'get_trial_id',
'get_sequence_id',
'send_metric',
]
init_standalone_logger()
_logger = logging.getLogger('nni')
def get_next_parameter(): def get_next_parameter():
pass _logger.warning('Requesting parameter without NNI framework, returning empty dict')
return {
'parameter_id': None,
'parameters': {}
}
def get_experiment_id(): def get_experiment_id():
pass pass
...@@ -43,6 +55,8 @@ def get_sequence_id(): ...@@ -43,6 +55,8 @@ def get_sequence_id():
def send_metric(string): def send_metric(string):
metric = json_tricks.loads(string) metric = json_tricks.loads(string)
if metric['type'] == 'FINAL': if metric['type'] == 'FINAL':
print('Final result:', metric['value']) _logger.info('Final result: %s', metric['value'])
elif metric['type'] == 'PERIODICAL': 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): ...@@ -126,9 +126,10 @@ def report_intermediate_result(metric):
serializable object. serializable object.
""" """
global _intermediate_seq 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({ 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, 'trial_job_id': trial_env_vars.NNI_TRIAL_JOB_ID,
'type': 'PERIODICAL', 'type': 'PERIODICAL',
'sequence': _intermediate_seq, 'sequence': _intermediate_seq,
...@@ -147,9 +148,10 @@ def report_final_result(metric): ...@@ -147,9 +148,10 @@ def report_final_result(metric):
metric: metric:
serializable object. 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({ 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, 'trial_job_id': trial_env_vars.NNI_TRIAL_JOB_ID,
'type': 'FINAL', 'type': 'FINAL',
'sequence': 0, '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