forked from External/grumble
Rename the default logtarget to not stutter. Also hide the default file log target implementation
This commit is contained in:
parent
8d351aedb0
commit
dd6f383d3e
4 changed files with 14 additions and 14 deletions
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue