# README
Go logger
Go logger is a logging port and set of opinionated adapters meant to simplify using a logger in hexagonal architecture.
Install
go get github.com/BaronBonet/go-logger
Why
In hexagonal architecture dependencies external dependencies should be injected to adapters and the service at runtime. This means business logic doesn't directly depend on external concerns which can (arguably) make code easier to test and maintain. A logger is an external dependency, therefor it to can be passed into a service or adapter at runtime.
type service struct {
logger logger
repository ports.Repository
}
func NewService(
logger logger
repository ports.Repository
) ports.Service {
return &service{
logger: logger,
repository: repository
}
}
I personally prefer to have 3 distinct logger adapters:
- A logger that provides structured logging for a service running on AWS (or some other cloud provider), to enable parsing of logs.
- A colorful logger for CLI tools and local development.
- A logger that can be passed into a service or adapter during testing.