@@ -22,6 +22,7 @@ import (
2222func HCLogLogger (l logger.Logger ) hclog.Logger {
2323 hcl := hclog .NewInterceptLogger (& hclog.LoggerOptions {
2424 Output : io .Discard , // only write through p.Logger Sink
25+ Level : hclog .Debug ,
2526 })
2627 hcl .RegisterSink (& hclSinkAdapter {l : logger .Sugared (l )})
2728 return hcl
@@ -116,23 +117,22 @@ func parseJSON(input string) (*logMessage, error) {
116117 return entry , nil
117118}
118119
119- // logDebug will parse msg and figure out if it's a panic, fatal or critical log message, this is done here because the hashicorp plugin will push any
120- // unrecognizable message from stderr as a debug statement
121- func logDebug (msg string , l logger.SugaredLogger , args ... any ) {
120+ // maybeCritical recognizes panic, fatal or critical log message, and logs them again at critical level.
121+ func maybeCritical (msg string , l logger.SugaredLogger , args ... any ) bool {
122122 if strings .HasPrefix (msg , "panic:" ) {
123123 l .Criticalw (fmt .Sprintf ("[PANIC] %s" , msg ), args ... )
124+ return true
124125 } else if log , err := parseJSON (msg ); err == nil {
125126 switch log .Level {
126127 case "fatal" :
127128 l .Criticalw (fmt .Sprintf ("[FATAL] %s" , log .Message ), flattenExtraArgs (log )... )
129+ return true
128130 case "critical" , "dpanic" :
129131 l .Criticalw (log .Message , flattenExtraArgs (log )... )
130- default :
131- l .Debugw (log .Message , flattenExtraArgs (log )... )
132+ return true
132133 }
133- } else {
134- l .Debugw (msg , args ... )
135134 }
135+ return false
136136}
137137
138138func (h * hclSinkAdapter ) Accept (_ string , level hclog.Level , msg string , args ... any ) {
@@ -152,13 +152,17 @@ func (h *hclSinkAdapter) Accept(_ string, level hclog.Level, msg string, args ..
152152 case hclog .Trace :
153153 l .Debugw (msg , args ... )
154154 case hclog .Debug :
155- logDebug (msg , l , args ... )
155+ if ! maybeCritical (msg , l , args ... ) { // panic/fatal/critical used to come through as stderr/out which maps to debug
156+ l .Debugw (msg , args ... )
157+ }
156158 case hclog .Info :
157159 l .Infow (msg , args ... )
158160 case hclog .Warn :
159161 l .Warnw (msg , args ... )
160162 case hclog .Error :
161- l .Errorw (msg , args ... )
163+ if ! maybeCritical (msg , l , args ... ) { // as of v1.7.0, panic/fatal errors are send at error level
164+ l .Errorw (msg , args ... )
165+ }
162166 }
163167}
164168
0 commit comments