57
57
BeforeFlagParseHook = func () {}
58
58
// Calculated base exe name from args (will be used if ProgramName if not set).
59
59
baseExe string
60
+ // List of functions to call for env help.
61
+ EnvHelpFuncs = []func (w io.Writer ){log .EnvHelp }
60
62
)
61
63
62
64
// ChangeFlagsDefault sets some flags to a different default.
@@ -92,7 +94,7 @@ func usage(w io.Writer, msg string, args ...any) {
92
94
}
93
95
_ , _ = fmt .Fprintf (w , log .Colors .Reset + "%s %s usage:\n \t %s %s[" +
94
96
log .Colors .Cyan + "flags" + log .Colors .Reset + "]%s\n or 1 of the special arguments\n \t %s {" +
95
- ColorJoin (log .Colors .Purple , "help" , "version" , "buildinfo" )+ "}\n " + "flags:\n " + log .Colors .Cyan ,
97
+ ColorJoin (log .Colors .Purple , "help" , "envhelp" , " version" , "buildinfo" )+ "}\n " + "flags:\n " + log .Colors .Cyan ,
96
98
ProgramName ,
97
99
log .Colors .Blue + ShortVersion + log .Colors .Reset ,
98
100
baseExe ,
@@ -114,6 +116,13 @@ func usage(w io.Writer, msg string, args ...any) {
114
116
}
115
117
}
116
118
119
+ func EnvHelp (w io.Writer ) {
120
+ fmt .Println ("# Environment variables recognized and current values:" )
121
+ for _ , f := range EnvHelpFuncs {
122
+ f (w )
123
+ }
124
+ }
125
+
117
126
// Main handles your commandline and flag parsing. Sets up flags first then call Main.
118
127
// For a server with dynamic flags, call ServerMain instead.
119
128
// Will either have called [ExitFunction] (defaults to [os.Exit])
@@ -156,17 +165,20 @@ func Main() {
156
165
BeforeFlagParseHook ()
157
166
nArgs := len (os .Args )
158
167
if nArgs == 2 {
168
+ specialCmd := true
159
169
switch strings .ToLower (os .Args [1 ]) {
160
170
case "version" :
161
171
fmt .Println (ShortVersion )
162
- ExitFunction (0 )
163
- return // not typically reached, unless ExitFunction doesn't exit
164
172
case "buildinfo" :
165
173
fmt .Print (FullVersion )
166
- ExitFunction (0 )
167
- return // not typically reached, unless ExitFunction doesn't exit
168
174
case "help" :
169
175
usage (os .Stdout , "" )
176
+ case "envhelp" :
177
+ EnvHelp (os .Stdout )
178
+ default :
179
+ specialCmd = false
180
+ }
181
+ if specialCmd {
170
182
ExitFunction (0 )
171
183
return // not typically reached, unless ExitFunction doesn't exit
172
184
}
@@ -183,7 +195,11 @@ func Main() {
183
195
os .Stderr .WriteString (log .Colors .BrightRed )
184
196
flag .Parse ()
185
197
os .Stderr .WriteString (log .Colors .Reset )
186
- log .Config .ConsoleColor = ! * nocolor
198
+ if * nocolor {
199
+ // Don't override the env if the flag isn't set
200
+ // (downside is if LOGGER_FORCE_COLOR is set to false, this -logger-no-color=false can't override it)
201
+ log .Config .ForceColor = ! * nocolor
202
+ }
187
203
log .SetColorMode ()
188
204
nArgs = len (flag .Args ())
189
205
argsRange := (MinArgs != MaxArgs )
@@ -197,7 +213,7 @@ func Main() {
197
213
}
198
214
if MaxArgs >= 0 && nArgs > MaxArgs {
199
215
if MaxArgs <= 0 {
200
- ErrUsage ("No arguments expected (except for version, buildinfo or help and -flags), got %d" , nArgs )
216
+ ErrUsage ("No arguments expected (except for version, buildinfo, help or envhelp and -flags), got %d" , nArgs )
201
217
return // not typically reached, unless ExitFunction doesn't exit
202
218
}
203
219
if argsRange {
0 commit comments