Logging

Copper provides the clogger package that allows structured logging in both dev and prod environments. It integrates deeply with cerrors to produce insightful logs with detailed error messages.

err := s.starships.PropelRocket(ctx, "my-test-rocket")
if err != nil {
	s.logger.WithTags(map[string]interface{}{
		"rocket": "my-test-rocket",
	}).Error("Failed to propel rocket", err)
}

The code snippet above may produce the following log statement:

Failed to propel rocket where rocket=my-test-rocket because
> failed to thrust engine where engine_number=3 because
> no more fuel where tank=1

Note that the errors are fully unwrapped, each providing a level of detail on what may have gone wrong. Since each error is tagged, we see helpful information like "engine_number=3" and "tank=1".

The logger can be configured to produce a multiline log statement for better readability or a JSON formatted single-line statement so that it can be easily parsed and indexed by log aggregators.

Last updated