1
0
Fork 0
forked from External/grumble

Rename the default logtarget to not stutter. Also hide the default file log target implementation

This commit is contained in:
Ola Bini 2020-03-26 14:04:14 +00:00
parent 8d351aedb0
commit dd6f383d3e
No known key found for this signature in database
GPG key ID: 6786A150F6A2B28F
4 changed files with 14 additions and 14 deletions

View file

@ -37,14 +37,14 @@ func main() {
dataDir.Close() dataDir.Close()
// Set up logging // Set up logging
err = logtarget.Target.OpenFile(Args.LogPath) err = logtarget.Default.OpenFile(Args.LogPath)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Unable to open log file (%v): %v", Args.LogPath, err) fmt.Fprintf(os.Stderr, "Unable to open log file (%v): %v", Args.LogPath, err)
return return
} }
log.SetPrefix("[G] ") log.SetPrefix("[G] ")
log.SetFlags(log.LstdFlags | log.Lmicroseconds) log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.SetOutput(logtarget.Target) log.SetOutput(logtarget.Default)
log.Printf("Grumble") log.Printf("Grumble")
log.Printf("Using data directory: %s", Args.DataDir) log.Printf("Using data directory: %s", Args.DataDir)

View file

@ -156,7 +156,7 @@ func NewServer(id int64) (s *Server, err error) {
s.Channels[0] = NewChannel(0, "Root") s.Channels[0] = NewChannel(0, "Root")
s.nextChanId = 1 s.nextChanId = 1
s.Logger = log.New(logtarget.Target, fmt.Sprintf("[%v] ", s.Id), log.LstdFlags|log.Lmicroseconds) s.Logger = log.New(logtarget.Default, fmt.Sprintf("[%v] ", s.Id), log.LstdFlags|log.Lmicroseconds)
return return
} }

View file

@ -20,7 +20,7 @@ func SignalHandler() {
signal.Notify(sigchan, syscall.SIGUSR2, syscall.SIGTERM, syscall.SIGINT) signal.Notify(sigchan, syscall.SIGUSR2, syscall.SIGTERM, syscall.SIGINT)
for sig := range sigchan { for sig := range sigchan {
if sig == syscall.SIGUSR2 { if sig == syscall.SIGUSR2 {
err := logtarget.Target.Rotate() err := logtarget.Default.Rotate()
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "unable to rotate log file: %v", err) fmt.Fprintf(os.Stderr, "unable to rotate log file: %v", err)
} }

View file

@ -12,6 +12,10 @@ import (
"sync" "sync"
) )
// LogTarget implements the io.Writer interface, allowing
// LogTarget to be registered with the regular Go log package.
// LogTarget multiplexes its incoming writes to multiple optional
// output writers, and one main output writer (the log file).
type LogTarget interface { type LogTarget interface {
io.Writer io.Writer
@ -19,25 +23,21 @@ type LogTarget interface {
Rotate() error Rotate() error
} }
// LogTarget implements the io.Writer interface, allowing type fileLogTarget struct {
// LogTarget to be registered with the regular Go log package.
// LogTarget multiplexes its incoming writes to multiple optional
// output writers, and one main output writer (the log file).
type FileLogTarget struct {
mu sync.Mutex mu sync.Mutex
logfn string logfn string
file *os.File file *os.File
memLog *bytes.Buffer memLog *bytes.Buffer
} }
var Target LogTarget var Default LogTarget
func init() { func init() {
Target = &FileLogTarget{} Default = &fileLogTarget{}
} }
// Write writes a log message to all registered io.Writers // Write writes a log message to all registered io.Writers
func (target *FileLogTarget) Write(in []byte) (int, error) { func (target *fileLogTarget) Write(in []byte) (int, error) {
target.mu.Lock() target.mu.Lock()
defer target.mu.Unlock() defer target.mu.Unlock()
@ -60,7 +60,7 @@ func (target *FileLogTarget) Write(in []byte) (int, error) {
// OpenFile opens the main log file for writing. // OpenFile opens the main log file for writing.
// This method will open the file in append-only mode. // This method will open the file in append-only mode.
func (target *FileLogTarget) OpenFile(fn string) (err error) { func (target *fileLogTarget) OpenFile(fn string) (err error) {
target.logfn = fn target.logfn = fn
target.file, err = os.OpenFile(target.logfn, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0650) target.file, err = os.OpenFile(target.logfn, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0650)
if err != nil { if err != nil {
@ -73,7 +73,7 @@ func (target *FileLogTarget) OpenFile(fn string) (err error) {
// This method holds a lock while rotating the log file, // This method holds a lock while rotating the log file,
// and all log writes will be held back until the rotation // and all log writes will be held back until the rotation
// is complete. // is complete.
func (target *FileLogTarget) Rotate() error { func (target *fileLogTarget) Rotate() error {
target.mu.Lock() target.mu.Lock()
defer target.mu.Unlock() defer target.mu.Unlock()