This is an automated email from the ASF dual-hosted git repository. technoboy pushed a commit to branch branch-2.11 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 04b4c57deffacfee1a0bb8f62a8fecfeda33484e Author: laminar (Tian Fang) <[email protected]> AuthorDate: Mon Aug 8 17:11:33 2022 +0800 Open [feature][function] add the ability to customize logging level for Go & Python functions (#16939) Signed-off-by: laminar <[email protected]> --- pulsar-function-go/logutil/log.go | 7 +++++++ pulsar-functions/instance/src/main/python/log.py | 5 ++++- .../instance/src/main/python/python_instance_main.py | 11 ++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/pulsar-function-go/logutil/log.go b/pulsar-function-go/logutil/log.go index 07970062d9d..75d28e4a0ae 100644 --- a/pulsar-function-go/logutil/log.go +++ b/pulsar-function-go/logutil/log.go @@ -32,6 +32,7 @@ import ( ) const ( + logLevelEnvName = "LOGGING_LEVEL" defaultLogLevel = log.InfoLevel defaultLogTimeFormat = "2006/01/02 15:04:05.000" ) @@ -175,6 +176,12 @@ func (f *TextFormatter) Format(entry *log.Entry) ([]byte, error) { func init() { log.SetLevel(defaultLogLevel) + // lookup and parse the logLevel variable + if logLevelStr, exist := os.LookupEnv(logLevelEnvName); exist { + if logLevel, err := log.ParseLevel(logLevelStr); err == nil { + log.SetLevel(logLevel) + } + } log.AddHook(&contextHook{}) log.SetFormatter(&TextFormatter{}) } diff --git a/pulsar-functions/instance/src/main/python/log.py b/pulsar-functions/instance/src/main/python/log.py index fcf1bdc95a8..06eac25f829 100644 --- a/pulsar-functions/instance/src/main/python/log.py +++ b/pulsar-functions/instance/src/main/python/log.py @@ -90,7 +90,10 @@ def init_logger(level, logfile, logging_config_file): os.environ['LOG_FILE'] = logfile logging.config.fileConfig(logging_config_file) Log = logging.getLogger() - Log.setLevel(level) + if level is not None: + Log.setLevel(level) + for h in Log.handlers: + h.setLevel(level) # set print to redirect to logger class StreamToLogger(object): diff --git a/pulsar-functions/instance/src/main/python/python_instance_main.py b/pulsar-functions/instance/src/main/python/python_instance_main.py index 5f7669b9c4d..3967635365c 100755 --- a/pulsar-functions/instance/src/main/python/python_instance_main.py +++ b/pulsar-functions/instance/src/main/python/python_instance_main.py @@ -78,6 +78,7 @@ def main(): parser.add_argument('--max_buffered_tuples', required=True, help='Maximum number of Buffered tuples') parser.add_argument('--logging_directory', required=True, help='Logging Directory') parser.add_argument('--logging_file', required=True, help='Log file name') + parser.add_argument('--logging_level', required=False, help='Logging level') parser.add_argument('--logging_config_file', required=True, help='Config file for logging') parser.add_argument('--expected_healthcheck_interval', required=True, help='Expected time in seconds between health checks', type=int) parser.add_argument('--secrets_provider', required=False, help='The classname of the secrets provider') @@ -154,7 +155,15 @@ def main(): log_file = os.path.join(args.logging_directory, util.getFullyQualifiedFunctionName(function_details.tenant, function_details.namespace, function_details.name), "%s-%s.log" % (args.logging_file, args.instance_id)) - log.init_logger(logging.INFO, log_file, args.logging_config_file) + logging_level = {"notset": logging.NOTSET, + "debug": logging.DEBUG, + "info": logging.INFO, + "warn": logging.WARNING, + "warning": logging.WARNING, + "error": logging.ERROR, + "critical": logging.CRITICAL, + "fatal": logging.CRITICAL}.get(args.logging_level, None) + log.init_logger(logging_level, log_file, args.logging_config_file) Log.info("Starting Python instance with %s" % str(args))
