Skip to content

Commit

Permalink
Merge pull request #1372 from tommyblue/syslog_different_loglevels
Browse files Browse the repository at this point in the history
  • Loading branch information
sirupsen authored Mar 12, 2023
2 parents a448f82 + 70234da commit e59b167
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ the last thing you want from your Logging library (again...).

This does not mean Logrus is dead. Logrus will continue to be maintained for
security, (backwards compatible) bug fixes, and performance (where we are
limited by the interface).
limited by the interface).

I believe Logrus' biggest contribution is to have played a part in today's
widespread use of structured logging in Golang. There doesn't seem to be a
Expand Down Expand Up @@ -99,7 +99,7 @@ time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcr
```
Note that this does add measurable overhead - the cost will depend on the version of Go, but is
between 20 and 40% in recent tests with 1.6 and 1.7. You can validate this in your
environment via benchmarks:
environment via benchmarks:
```
go test -bench=.*CallerTracing
```
Expand Down Expand Up @@ -317,6 +317,8 @@ log.SetLevel(log.InfoLevel)
It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
environment if your application has that.

Note: If you want different log levels for global (`log.SetLevel(...)`) and syslog logging, please check the [syslog hook README](hooks/syslog/README.md#different-log-levels-for-local-and-remote-logging).

#### Entries

Besides the fields added with `WithField` or `WithFields` some fields are
Expand Down
42 changes: 42 additions & 0 deletions hooks/syslog/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,45 @@ func main() {
}
}
```

### Different log levels for local and remote logging

By default `NewSyslogHook()` sends logs through the hook for all log levels. If you want to have
different log levels between local logging and syslog logging (i.e. respect the `priority` argument
passed to `NewSyslogHook()`), you need to implement the `logrus_syslog.SyslogHook` interface
overriding `Levels()` to return only the log levels you're interested on.

The following example shows how to log at **DEBUG** level for local logging and **WARN** level for
syslog logging:

```go
package main

import (
"log/syslog"

log "github.com/sirupsen/logrus"
logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
)

type customHook struct {
*logrus_syslog.SyslogHook
}

func (h *customHook) Levels() []log.Level {
return []log.Level{log.WarnLevel}
}

func main() {
log.SetLevel(log.DebugLevel)

hook, err := logrus_syslog.NewSyslogHook("tcp", "localhost:5140", syslog.LOG_WARNING, "myTag")
if err != nil {
panic(err)
}

log.AddHook(&customHook{hook})

//...
}
```

0 comments on commit e59b167

Please sign in to comment.