Files
releases/internal/debug/debug.go
T
Stephan Renatus 0532ad2636 compiler: emit debug messages for indexing decisions (#3157)
Why a comprehension is not indexed should now be a little
more transparent, when enabling debug output:

    $ opa build --debug test.rego
    compile.go:1832: test.rego:3: no index vars

While changing this, the debug mechanism got more stream-y:
the different WithDebug() options take io.Writer, and they're
passed along to different sub-components. Nothing is retrieved
after (for example) compiling, but during compilation, the
debug messages are written to the passed writer.

The debug logs for optimization and planning now also include
the source file locations (go) where a debug message was logged.

Signed-off-by: Stephan Renatus <stephan.renatus@gmail.com>
2021-02-23 14:57:35 +01:00

37 lines
1.0 KiB
Go

package debug
import (
"io"
"io/ioutil"
"log"
)
// Debug allows printing debug messages.
type Debug interface {
// Printf prints, with a short file:line-number prefix
Printf(format string, args ...interface{})
// Writer returns the writer being written to, which may be
// `ioutil.Discard` if no debug output is requested.
Writer() io.Writer
// Output allows tweaking the calldepth used for figuring
// out which Go source file location is the interesting one,
// i.e., which is included in the debug message. Useful for
// setting up local helper methods.
Output(calldepth int, s string) error
}
// New returns a new `Debug` outputting to the passed `sink`.
func New(sink io.Writer) Debug {
flags := log.Lshortfile
return log.New(sink, "", flags)
}
// Discard returns a new `Debug` that doesn't output anything.
// Note: We're not implementing the methods here with noop stubs
// since doing this way, we can propagate the "discarding" via
// `(Debug).Writer()`.
func Discard() Debug {
return New(ioutil.Discard)
}