You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by te...@apache.org on 2022/08/08 09:24:27 UTC
[pulsar] 11/11: Open [feature][function] add the ability to customize logging level for Go & Python functions (#16939)
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) <tp...@gmail.com>
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 <tp...@gmail.com>
---
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))