Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why I did it
SONiC provides two Python logger implementations:
sonic_py_common.logger.Logger
andsonic_py_common.syslogger.SysLogger
. Both of them do not provide the ability to change log level at real time. Sometimes, in order to get more debug information, developer has to manually change the log level in code on a running switch and restart the Python daemon. This is not convenient.SONiC also provides a C/C++ logger implementation in
sonic-platform-common.common.logger.cpp
. This C/C++ logger implementation is also a wrapper of Linux standardsyslog
which is widely used by swss/syncd. It provides the ability to set log level on fly by starting a thread to listen to CONFIG DB LOGGER table change. SONiC infrastructure also provides the Python wrapper forsonic-platform-common.common.logger.cpp
which isswsscommon.Logger
. However, this logger implementation also has some drawbacks:swsscommon.Logger
assumes redis DB is ready to connect. This is a valid assumption for swss/syncd. But it is not good for a Python logger implementation because some Python script may be called before redis server starting.swsscommon.Logger
wraps Linux syslog which only support single log identifier for a daemon.So,
swsscommon.Logger
is not an option too.This PR is a Python logger enhancement which allows user setting log level at run time.
Work item tracking
How I did it
swsscommon.Logger
depends on a thread to listen to CONFIG DB LOGGER table change. It refreshes log level for each logger instances once the thread detects a DB entry change. A thread is considered heavy in a python script, especially that there are many short and simple python scripts which also use logger. To keep python logger light weight, it uses a different design thanswsscommon.Logger
:SysLogger
classHow to verify it
Manual test
New unit test cases
Which release branch to backport (provide reason below if selected)
Tested branch (Please provide the tested image version)
Description for the changelog
Link to config_db schema for YANG module changes
A picture of a cute animal (not mandatory but encouraged)