Skip to content

Commit

Permalink
agent: Filter messages logged to syslog. Fixes #272
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanuber committed Oct 14, 2014
1 parent bee5fe2 commit b997733
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 2 deletions.
2 changes: 1 addition & 1 deletion command/agent/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ func (c *Command) setupLoggers(config *Config) (*GatedWriter, *logWriter, io.Wri
c.Ui.Error(fmt.Sprintf("Syslog setup failed: %v", err))
return nil, nil, nil
}
syslog = &SyslogWrapper{l}
syslog = &SyslogWrapper{l, c.logFilter}
}

// Create a log writer, and wrap a logOutput around it
Expand Down
9 changes: 8 additions & 1 deletion command/agent/syslog.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package agent
import (
"bytes"
"github.com/hashicorp/go-syslog"
"github.com/hashicorp/logutils"
)

// levelPriority is used to map a log level to a
Expand All @@ -20,11 +21,17 @@ var levelPriority = map[string]gsyslog.Priority{
// writing them to a Syslogger. Implements the io.Writer
// interface.
type SyslogWrapper struct {
l gsyslog.Syslogger
l gsyslog.Syslogger
filt *logutils.LevelFilter
}

// Write is used to implement io.Writer
func (s *SyslogWrapper) Write(p []byte) (int, error) {
// Skip syslog if the log level doesn't apply
if !s.filt.Check(p) {
return 0, nil
}

// Extract log level
var level string
afterLevel := p
Expand Down
35 changes: 35 additions & 0 deletions command/agent/syslog_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package agent

import (
"testing"

"github.com/hashicorp/go-syslog"
"github.com/hashicorp/logutils"
)

func TestSyslogFilter(t *testing.T) {
l, err := gsyslog.NewLogger(gsyslog.LOG_NOTICE, "LOCAL0", "consul")
if err != nil {
t.Fatalf("err: %s", err)
}

filt := LevelFilter()
filt.MinLevel = logutils.LogLevel("INFO")

s := &SyslogWrapper{l, filt}
n, err := s.Write([]byte("[INFO] test"))
if err != nil {
t.Fatalf("err: %s", err)
}
if n == 0 {
t.Fatalf("should have logged")
}

n, err = s.Write([]byte("[DEBUG] test"))
if err != nil {
t.Fatalf("err: %s", err)
}
if n != 0 {
t.Fatalf("should not have logged")
}
}

0 comments on commit b997733

Please sign in to comment.