mirror of
https://github.com/mumble-voip/grumble.git
synced 2025-12-20 06:10:00 -08:00
Move logtarget to its own package.
This commit is contained in:
parent
5e4e81ff50
commit
79e5ffbd4d
7 changed files with 86 additions and 62 deletions
10
Makefile
10
Makefile
|
|
@ -18,7 +18,8 @@ PACKAGES = \
|
||||||
pkg/sessionpool \
|
pkg/sessionpool \
|
||||||
pkg/ban \
|
pkg/ban \
|
||||||
pkg/htmlfilter \
|
pkg/htmlfilter \
|
||||||
pkg/freezer
|
pkg/freezer \
|
||||||
|
pkg/logtarget
|
||||||
|
|
||||||
GCFLAGS = \
|
GCFLAGS = \
|
||||||
-Ipkg/cryptstate/_obj \
|
-Ipkg/cryptstate/_obj \
|
||||||
|
|
@ -29,7 +30,8 @@ GCFLAGS = \
|
||||||
-Ipkg/sessionpool/_obj \
|
-Ipkg/sessionpool/_obj \
|
||||||
-Ipkg/ban/_obj \
|
-Ipkg/ban/_obj \
|
||||||
-Ipkg/htmlfilter/_obj \
|
-Ipkg/htmlfilter/_obj \
|
||||||
-Ipkg/freezer/_obj
|
-Ipkg/freezer/_obj \
|
||||||
|
-Ipkg/logtarget/_obj
|
||||||
|
|
||||||
LDFLAGS = \
|
LDFLAGS = \
|
||||||
-Lpkg/cryptstate/_obj \
|
-Lpkg/cryptstate/_obj \
|
||||||
|
|
@ -40,7 +42,8 @@ LDFLAGS = \
|
||||||
-Lpkg/sessionpool/_obj \
|
-Lpkg/sessionpool/_obj \
|
||||||
-Lpkg/ban/_obj \
|
-Lpkg/ban/_obj \
|
||||||
-Lpkg/htmlfilter/_obj \
|
-Lpkg/htmlfilter/_obj \
|
||||||
-Lpkg/freezer/_obj
|
-Lpkg/freezer/_obj \
|
||||||
|
-Lpkg/logtarget/_obj
|
||||||
|
|
||||||
GOFILES = \
|
GOFILES = \
|
||||||
grumble.go \
|
grumble.go \
|
||||||
|
|
@ -55,7 +58,6 @@ GOFILES = \
|
||||||
gencert.go \
|
gencert.go \
|
||||||
register.go \
|
register.go \
|
||||||
ssh.go \
|
ssh.go \
|
||||||
log.go \
|
|
||||||
args.go \
|
args.go \
|
||||||
|
|
||||||
ifeq ($(SQLITE),1)
|
ifeq ($(SQLITE),1)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"grumble/blobstore"
|
"grumble/blobstore"
|
||||||
|
"grumble/logtarget"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
@ -25,7 +26,7 @@ func main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = LogTarget.OpenFile(Args.LogPath)
|
err = logtarget.Target.OpenFile(Args.LogPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Unable to open log file: %v", err)
|
fmt.Fprintf(os.Stderr, "Unable to open log file: %v", err)
|
||||||
return
|
return
|
||||||
|
|
@ -33,10 +34,9 @@ func main() {
|
||||||
|
|
||||||
log.SetPrefix("[G] ")
|
log.SetPrefix("[G] ")
|
||||||
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
|
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
|
||||||
log.SetOutput(&LogTarget)
|
log.SetOutput(&logtarget.Target)
|
||||||
|
|
||||||
log.Printf("Grumble")
|
log.Printf("Grumble")
|
||||||
|
|
||||||
log.Printf("Using data directory: %s", Args.DataDir)
|
log.Printf("Using data directory: %s", Args.DataDir)
|
||||||
|
|
||||||
// Open the blobstore
|
// Open the blobstore
|
||||||
|
|
|
||||||
53
log.go
53
log.go
|
|
@ -1,53 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"os"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
type logTarget struct {
|
|
||||||
mu sync.Mutex
|
|
||||||
logfn string
|
|
||||||
file *os.File
|
|
||||||
memLog *bytes.Buffer
|
|
||||||
}
|
|
||||||
|
|
||||||
var LogTarget logTarget
|
|
||||||
|
|
||||||
func (target *logTarget) Write(in []byte) (int, error) {
|
|
||||||
target.mu.Lock()
|
|
||||||
defer target.mu.Unlock()
|
|
||||||
|
|
||||||
return target.file.Write(in)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open a log file for writing.
|
|
||||||
// This method will open the file in append-only mode.
|
|
||||||
func (target *logTarget) OpenFile(fn string) (err error) {
|
|
||||||
target.logfn = fn
|
|
||||||
target.file, err = os.OpenFile(target.logfn, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0650)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform a log rotation
|
|
||||||
func (target *logTarget) Rotate() error {
|
|
||||||
target.mu.Lock()
|
|
||||||
defer target.mu.Unlock()
|
|
||||||
|
|
||||||
// Close the existing log file
|
|
||||||
err := target.file.Close()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
target.file, err = os.OpenFile(target.logfn, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0650)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
7
pkg/logtarget/Makefile
Normal file
7
pkg/logtarget/Makefile
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
include $(GOROOT)/src/Make.inc
|
||||||
|
|
||||||
|
TARG = grumble/logtarget
|
||||||
|
GOFILES = \
|
||||||
|
logtarget.go
|
||||||
|
|
||||||
|
include $(GOROOT)/src/Make.pkg
|
||||||
66
pkg/logtarget/logtarget.go
Normal file
66
pkg/logtarget/logtarget.go
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
// Copyright (c) 2011 The Grumble Authors
|
||||||
|
// The use of this source code is goverened by a BSD-style
|
||||||
|
// license that can be found in the LICENSE-file.
|
||||||
|
|
||||||
|
// Package logtarget implements a multiplexing logging target
|
||||||
|
package logtarget
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"os"
|
||||||
|
"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 struct {
|
||||||
|
mu sync.Mutex
|
||||||
|
logfn string
|
||||||
|
file *os.File
|
||||||
|
memLog *bytes.Buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
var Target LogTarget
|
||||||
|
|
||||||
|
// Write writes a log message to all registered io.Writers
|
||||||
|
func (target *LogTarget) Write(in []byte) (int, error) {
|
||||||
|
target.mu.Lock()
|
||||||
|
defer target.mu.Unlock()
|
||||||
|
|
||||||
|
return target.file.Write(in)
|
||||||
|
}
|
||||||
|
|
||||||
|
// OpenFile opens the main log file for writing.
|
||||||
|
// This method will open the file in append-only mode.
|
||||||
|
func (target *LogTarget) OpenFile(fn string) (err error) {
|
||||||
|
target.logfn = fn
|
||||||
|
target.file, err = os.OpenFile(target.logfn, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0650)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rotate rotates the current log file.
|
||||||
|
// This method holds a lock while rotating the log file,
|
||||||
|
// and all log writes will be held back until the rotation
|
||||||
|
// is complete.
|
||||||
|
func (target *LogTarget) Rotate() error {
|
||||||
|
target.mu.Lock()
|
||||||
|
defer target.mu.Unlock()
|
||||||
|
|
||||||
|
// Close the existing log file
|
||||||
|
err := target.file.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
target.file, err = os.OpenFile(target.logfn, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0650)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"grumble/cryptstate"
|
"grumble/cryptstate"
|
||||||
"grumble/freezer"
|
"grumble/freezer"
|
||||||
"grumble/htmlfilter"
|
"grumble/htmlfilter"
|
||||||
|
"grumble/logtarget"
|
||||||
"grumble/mumbleproto"
|
"grumble/mumbleproto"
|
||||||
"grumble/serverconf"
|
"grumble/serverconf"
|
||||||
"grumble/sessionpool"
|
"grumble/sessionpool"
|
||||||
|
|
@ -165,7 +166,7 @@ func NewServer(id int64, addr string, port int) (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, fmt.Sprintf("[%v] ", s.Id), log.LstdFlags|log.Lmicroseconds)
|
s.Logger = log.New(&logtarget.Target, fmt.Sprintf("[%v] ", s.Id), log.LstdFlags|log.Lmicroseconds)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"grumble/logtarget"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
)
|
)
|
||||||
|
|
@ -15,7 +16,7 @@ func SignalHandler() {
|
||||||
sig := <-signal.Incoming
|
sig := <-signal.Incoming
|
||||||
|
|
||||||
if sig == os.SIGUSR2 {
|
if sig == os.SIGUSR2 {
|
||||||
err := LogTarget.Rotate()
|
err := logtarget.Target.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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue