1414use Toolkit \Cli \Cli ;
1515use Toolkit \Cli \Color \ColorTag ;
1616use Toolkit \Stdlib \Json ;
17+ use Toolkit \Stdlib \OS ;
18+ use Toolkit \Stdlib \Str ;
1719use function date ;
1820use function debug_backtrace ;
1921use function implode ;
@@ -55,6 +57,19 @@ class Console extends Cli
5557 self ::VERB_CRAZY => 'CRAZY ' ,
5658 ];
5759
60+ // name => level
61+ public const NAME2LEVEL = [
62+ 'QUIET ' => self ::VERB_QUIET ,
63+ 'ERR ' => self ::VERB_ERROR , // alias
64+ 'ERROR ' => self ::VERB_ERROR ,
65+ 'WARN ' => self ::VERB_WARN ,
66+ 'WARNING ' => self ::VERB_WARN , // alias
67+ 'INFO ' => self ::VERB_INFO ,
68+ 'DEBUG ' => self ::VERB_DEBUG ,
69+ 'CRAZY ' => self ::VERB_CRAZY ,
70+ ];
71+
72+ // level => color name
5873 public const LEVEL2TAG = [
5974 self ::VERB_QUIET => 'normal ' ,
6075 self ::VERB_ERROR => 'error ' ,
@@ -64,7 +79,7 @@ class Console extends Cli
6479 self ::VERB_CRAZY => 'magenta ' ,
6580 ];
6681
67- public const CMD_GROUP = 1 ;
82+ public const CMD_GROUP = 1 ;
6883
6984 public const CMD_SINGLE = 2 ;
7085
@@ -76,6 +91,49 @@ class Console extends Cli
7691 */
7792 private static ?Application $ app ;
7893
94+ /**
95+ * get debug level from ENV var: `CONSOLE_DEBUG`. if not set, return `$defaultLevel`
96+ *
97+ * @param int $defaultLevel
98+ *
99+ * @return integer
100+ */
101+ public static function getLevelFromENV (int $ defaultLevel = self ::VERB_ERROR ): int
102+ {
103+ // feat: support set debug level by ENV var: CONSOLE_DEBUG
104+ $ level = $ defaultLevel ;
105+ $ envVal = OS ::getEnvStrVal (Console::DEBUG_ENV_KEY );
106+
107+ if ($ envVal !== '' ) {
108+ if (is_numeric ($ envVal )) {
109+ $ level = (int )$ envVal ;
110+ } else {
111+ $ level = self ::nameToLevel ($ envVal , $ defaultLevel );
112+ }
113+ }
114+
115+ return $ level ;
116+ }
117+
118+ /**
119+ * level name to level number
120+ *
121+ * @param string $levelName
122+ * @param int $defaultLevel
123+ *
124+ * @return int
125+ */
126+ public static function nameToLevel (string $ levelName , int $ defaultLevel = self ::VERB_INFO ): int
127+ {
128+ $ levelName = Str::upper ($ levelName );
129+
130+ if (isset (self ::NAME2LEVEL [$ levelName ])) {
131+ return self ::NAME2LEVEL [$ levelName ];
132+ }
133+
134+ return $ defaultLevel ;
135+ }
136+
79137 /**
80138 * @return Application
81139 */
@@ -184,7 +242,8 @@ public static function log(int $level, string $msg, array $data = [], array $opt
184242 $ backtrace = debug_backtrace (DEBUG_BACKTRACE_IGNORE_ARGS , self ::$ traceIndex + 2 );
185243 $ position = self ::formatBacktrace ($ backtrace , self ::$ traceIndex );
186244
187- self ::writef ('%s [%s] [%s]%s %s %s ' . PHP_EOL , $ datetime , $ taggedName , $ position , $ optString , trim ($ msg ), $ dataString );
245+ self ::writef ('%s [%s] [%s]%s %s %s ' . PHP_EOL , $ datetime , $ taggedName , $ position , $ optString , trim ($ msg ),
246+ $ dataString );
188247 }
189248
190249 /**
0 commit comments