refactor: adopt portigo infrastructure patterns
Add config package with build-tag-switched dev/prod environments, structured logging via zerolog, Taskfile for dev workflow, golangci-lint config, testutil package, and improved DB setup with proper SQLite pragmas and cleanup. Rename sqlc output package from gen to repository. Switch to allowlist .gitignore, Alpine+UPX+scratch Dockerfile, and CI pipeline with test/lint gates before deploy.
This commit is contained in:
41
logging/log.go
Normal file
41
logging/log.go
Normal file
@@ -0,0 +1,41 @@
|
||||
// Package logging configures zerolog and provides HTTP request logging middleware.
|
||||
package logging
|
||||
|
||||
import (
|
||||
"io"
|
||||
stdlog "log"
|
||||
"os"
|
||||
|
||||
"github.com/ryanhamamura/c4/config"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/rs/zerolog/pkgerrors"
|
||||
)
|
||||
|
||||
func SetupLogger(env config.Environment, level zerolog.Level) *zerolog.Logger {
|
||||
zerolog.ErrorStackFieldName = "stack_trace"
|
||||
zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack
|
||||
|
||||
zerolog.SetGlobalLevel(level)
|
||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
||||
|
||||
var output io.Writer
|
||||
switch env {
|
||||
case config.Dev:
|
||||
output = zerolog.ConsoleWriter{
|
||||
Out: os.Stderr,
|
||||
TimeFormat: "2006/01/02 15:04:05",
|
||||
}
|
||||
case config.Prod:
|
||||
output = os.Stderr
|
||||
}
|
||||
|
||||
logger := zerolog.New(output).With().Timestamp().Stack().Logger()
|
||||
zerolog.DefaultContextLogger = &logger
|
||||
log.Logger = logger
|
||||
|
||||
stdlog.SetFlags(0)
|
||||
stdlog.SetOutput(logger)
|
||||
return &logger
|
||||
}
|
||||
Reference in New Issue
Block a user