mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
inbucket: respect -logfile flag again for #90
Removed log file rotation, too racy, not needed in the world of docker and systemd.
This commit is contained in:
@@ -26,6 +26,13 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
- Uses the same default ports as other builds; smtp:2500 http:9000 pop3:1100
|
- Uses the same default ports as other builds; smtp:2500 http:9000 pop3:1100
|
||||||
- Uses volume `/config` for `greeting.html`
|
- Uses volume `/config` for `greeting.html`
|
||||||
- Uses volume `/storage` for mail storage
|
- Uses volume `/storage` for mail storage
|
||||||
|
- Log output is now structured, and will be output as JSON with the `-logjson`
|
||||||
|
flag; which is enabled by default for the Docker container.
|
||||||
|
- SMTP and POP3 network tracing is no longer logged regardless of level, but can
|
||||||
|
be sent to stdout via `-netdebug` flag.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Support for SIGHUP and log file rotation.
|
||||||
|
|
||||||
|
|
||||||
## [v1.3.1] - 2018-03-10
|
## [v1.3.1] - 2018-03-10
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"expvar"
|
"expvar"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"runtime"
|
"runtime"
|
||||||
@@ -72,16 +74,12 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Logger setup.
|
// Logger setup.
|
||||||
if !*logjson {
|
closeLog, err := openLog(*logfile, *logjson)
|
||||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
if err != nil {
|
||||||
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
fmt.Fprintf(os.Stderr, "Log error: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
_ = logfile
|
startupLog := log.With().Str("phase", "startup").Logger()
|
||||||
// } else if *logfile != "stderr" {
|
|
||||||
// // TODO #90 file output
|
|
||||||
// // defer close
|
|
||||||
// }
|
|
||||||
slog := log.With().Str("phase", "startup").Logger()
|
|
||||||
// Process configuration.
|
// Process configuration.
|
||||||
config.Version = version
|
config.Version = version
|
||||||
config.BuildDate = date
|
config.BuildDate = date
|
||||||
@@ -96,18 +94,19 @@ func main() {
|
|||||||
}
|
}
|
||||||
// Setup signal handler.
|
// Setup signal handler.
|
||||||
sigChan := make(chan os.Signal, 1)
|
sigChan := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigChan, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGINT)
|
signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
|
||||||
// Initialize logging.
|
// Initialize logging.
|
||||||
slog.Info().Str("version", config.Version).Str("buildDate", config.BuildDate).Msg("Inbucket")
|
startupLog.Info().Str("version", config.Version).Str("buildDate", config.BuildDate).
|
||||||
|
Msg("Inbucket starting")
|
||||||
// Write pidfile if requested.
|
// Write pidfile if requested.
|
||||||
if *pidfile != "" {
|
if *pidfile != "" {
|
||||||
pidf, err := os.Create(*pidfile)
|
pidf, err := os.Create(*pidfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Fatal().Err(err).Str("path", *pidfile).Msg("Failed to create pidfile")
|
startupLog.Fatal().Err(err).Str("path", *pidfile).Msg("Failed to create pidfile")
|
||||||
}
|
}
|
||||||
fmt.Fprintf(pidf, "%v\n", os.Getpid())
|
fmt.Fprintf(pidf, "%v\n", os.Getpid())
|
||||||
if err := pidf.Close(); err != nil {
|
if err := pidf.Close(); err != nil {
|
||||||
slog.Fatal().Err(err).Str("path", *pidfile).Msg("Failed to close pidfile")
|
startupLog.Fatal().Err(err).Str("path", *pidfile).Msg("Failed to close pidfile")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Configure internal services.
|
// Configure internal services.
|
||||||
@@ -116,7 +115,7 @@ func main() {
|
|||||||
store, err := storage.FromConfig(conf.Storage)
|
store, err := storage.FromConfig(conf.Storage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
removePIDFile(*pidfile)
|
removePIDFile(*pidfile)
|
||||||
slog.Fatal().Err(err).Str("module", "storage").Msg("Fatal storage error")
|
startupLog.Fatal().Err(err).Str("module", "storage").Msg("Fatal storage error")
|
||||||
}
|
}
|
||||||
msgHub := msghub.New(rootCtx, conf.Web.MonitorHistory)
|
msgHub := msghub.New(rootCtx, conf.Web.MonitorHistory)
|
||||||
addrPolicy := &policy.Addressing{Config: conf.SMTP}
|
addrPolicy := &policy.Addressing{Config: conf.SMTP}
|
||||||
@@ -141,9 +140,6 @@ signalLoop:
|
|||||||
select {
|
select {
|
||||||
case sig := <-sigChan:
|
case sig := <-sigChan:
|
||||||
switch sig {
|
switch sig {
|
||||||
case syscall.SIGHUP:
|
|
||||||
log.Info().Str("signal", "SIGHUP").Msg("Recieved SIGHUP, cycling logfile")
|
|
||||||
// TODO #90 log.Rotate()
|
|
||||||
case syscall.SIGINT:
|
case syscall.SIGINT:
|
||||||
// Shutdown requested
|
// Shutdown requested
|
||||||
log.Info().Str("phase", "shutdown").Str("signal", "SIGINT").
|
log.Info().Str("phase", "shutdown").Str("signal", "SIGINT").
|
||||||
@@ -166,6 +162,43 @@ signalLoop:
|
|||||||
pop3Server.Drain()
|
pop3Server.Drain()
|
||||||
retentionScanner.Join()
|
retentionScanner.Join()
|
||||||
removePIDFile(*pidfile)
|
removePIDFile(*pidfile)
|
||||||
|
closeLog()
|
||||||
|
}
|
||||||
|
|
||||||
|
// openLog configures zerolog output, returns func to close logfile.
|
||||||
|
func openLog(logfile string, json bool) (close func(), err error) {
|
||||||
|
close = func() {}
|
||||||
|
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
||||||
|
var w io.Writer
|
||||||
|
color := true
|
||||||
|
switch logfile {
|
||||||
|
case "stderr":
|
||||||
|
w = os.Stderr
|
||||||
|
case "stdout":
|
||||||
|
w = os.Stdout
|
||||||
|
default:
|
||||||
|
logf, err := os.OpenFile(logfile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
bw := bufio.NewWriter(logf)
|
||||||
|
w = bw
|
||||||
|
color = false
|
||||||
|
close = func() {
|
||||||
|
_ = bw.Flush()
|
||||||
|
_ = logf.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w = zerolog.SyncWriter(w)
|
||||||
|
if json {
|
||||||
|
log.Logger = log.Output(w)
|
||||||
|
return close, nil
|
||||||
|
}
|
||||||
|
log.Logger = log.Output(zerolog.ConsoleWriter{
|
||||||
|
Out: w,
|
||||||
|
NoColor: !color,
|
||||||
|
})
|
||||||
|
return close, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// removePIDFile removes the PID file if created.
|
// removePIDFile removes the PID file if created.
|
||||||
|
|||||||
Reference in New Issue
Block a user