From c0270a5c675385b80ec2c1e3050c772355af1ffa Mon Sep 17 00:00:00 2001
From: Toby <tobyxdd@gmail.com>
Date: Tue, 7 Jul 2020 18:38:18 -0700
Subject: [PATCH] Add log level & format environment variables

---
 README.md    |  8 ++++++++
 README.zh.md |  8 ++++++++
 cmd/main.go  | 20 ++++++++++++++++----
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index bd58416..d219674 100644
--- a/README.md
+++ b/README.md
@@ -154,3 +154,11 @@ To prevent firewalls from potentially detecting & blocking the protocol, a simpl
 | Max receive window size per connection | recv_window_conn | -recv-window-conn |
 | Max receive window size | recv_window | -recv-window |
 | Obfuscation key | obfs | -obfs |
+
+## Logs
+
+By default, the program outputs DEBUG level, text format logs via stdout.
+
+To change the logging level, set `LOGGING_LEVEL` environment variable, which supports `panic`, `fatal`, `error`, `warn`, `info`, ` debug`, `trace`
+
+To print JSON instead, set `LOGGING_FORMATTER` to `json`
diff --git a/README.zh.md b/README.zh.md
index b0af1e6..d360ba5 100644
--- a/README.zh.md
+++ b/README.zh.md
@@ -152,3 +152,11 @@ shady_hacker smokeweed420
 | 单连接最大接收窗口大小 | recv_window_conn | -recv-window-conn |
 | 总最大接收窗口大小 | recv_window | -recv-window |
 | 混淆密钥 | obfs | -obfs |
+
+## 日志
+
+程序默认在 stdout 输出 DEBUG 级别,文字格式的日志。
+
+如果需要修改日志级别可以使用 `LOGGING_LEVEL` 环境变量,支持 `panic`, `fatal`, `error`, `warn`, `info`, `debug`, `trace`
+
+如果需要输出 JSON 可以把 `LOGGING_FORMATTER` 设置为 `json`
\ No newline at end of file
diff --git a/cmd/main.go b/cmd/main.go
index c9dd2fe..2a13d51 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -23,10 +23,22 @@ var modeMap = map[string]func(args []string){
 
 func init() {
 	logrus.SetOutput(os.Stdout)
-	logrus.SetLevel(logrus.DebugLevel)
-	logrus.SetFormatter(&logrus.TextFormatter{
-		ForceColors: true,
-	})
+
+	lvl, err := logrus.ParseLevel(os.Getenv("LOGGING_LEVEL"))
+	if err == nil {
+		logrus.SetLevel(lvl)
+	} else {
+		logrus.SetLevel(logrus.DebugLevel)
+	}
+
+	fmtter := os.Getenv("LOGGING_FORMATTER")
+	if strings.ToLower(fmtter) == "json" {
+		logrus.SetFormatter(&logrus.JSONFormatter{})
+	} else {
+		logrus.SetFormatter(&logrus.TextFormatter{
+			ForceColors: true,
+		})
+	}
 }
 
 func main() {