Documentation
¶
Overview ¶
Package tflogtest provides functionality for unit testing of provider logging.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func MultilineJSONDecode ¶
MultilineJSONDecode supports decoding the output of a JSON logger into a slice of maps, with each element representing a log entry.
Example ¶
var output bytes.Buffer ctx := RootLogger(context.Background(), &output) // Root provider logger is now available for usage, such as writing // entries, calling SetField(), or calling NewSubsystem(). tflog.Trace(ctx, "entry 1") tflog.Trace(ctx, "entry 2") entries, err := MultilineJSONDecode(&output) if err != nil { // Typical unit testing would call t.Fatalf() here. fmt.Printf("unable to read multiple line JSON: %s", err) } // Entries can be checked via go-cmp's cmp.Diff() or other testing methods. // This example outputs them to stdout in an explicitly formatted string, // which would not be expected in typical unit testing. for _, entry := range entries { fmt.Printf("@message: %s\n", entry["@message"]) }
Output: @message: entry 1 @message: entry 2
func RootLogger ¶
RootLogger returns a context containing a provider root logger suitable for unit testing that is:
- Written to the given io.Writer, such as a bytes.Buffer.
- Written with JSON output, that can be decoded with MultilineJSONDecode.
- Log level set to TRACE.
- Without location/caller information in log entries.
- Without timestamps in log entries.
Example ¶
var output bytes.Buffer ctx := RootLogger(context.Background(), &output) // Root provider logger is now available for usage, such as writing // entries, calling SetField(), or calling NewSubsystem(). tflog.Trace(ctx, "hello, world", map[string]interface{}{ "foo": 123, "colors": []string{"red", "blue", "green"}, }) fmt.Println(output.String())
Output: {"@level":"trace","@message":"hello, world","@module":"provider","colors":["red","blue","green"],"foo":123}
Types ¶
This section is empty.