forked from mirror/logrus
timeout is now configurable and documented
This commit is contained in:
parent
383ab1fb69
commit
5df4b882d0
|
@ -40,3 +40,22 @@ When logs are sent to sentry these fields are treated differently.
|
||||||
is logging the event (hostname.example.com)
|
is logging the event (hostname.example.com)
|
||||||
- logger is the part of the application which is logging the event.
|
- logger is the part of the application which is logging the event.
|
||||||
In go this usually means setting it to the name of the package.
|
In go this usually means setting it to the name of the package.
|
||||||
|
|
||||||
|
## Timeout
|
||||||
|
|
||||||
|
`Timeout` is the time the sentry hook will wait for a response
|
||||||
|
from the sentry server.
|
||||||
|
|
||||||
|
If this time elapses with no response from
|
||||||
|
the server an error will be returned.
|
||||||
|
|
||||||
|
If `Timeout` is set to 0 the SentryHook will not wait for a reply
|
||||||
|
and will assume a correct delivery.
|
||||||
|
|
||||||
|
The SentryHook has a default timeout of `100 milliseconds` when created
|
||||||
|
with a call to `NewSentryHook`. This can be changed by assigning a value to the `Timeout` field:
|
||||||
|
|
||||||
|
```go
|
||||||
|
hook, _ := logrus_sentry.NewSentryHook(...)
|
||||||
|
hook.Timeout = 20*time.Seconds
|
||||||
|
```
|
||||||
|
|
|
@ -8,10 +8,6 @@ import (
|
||||||
"github.com/getsentry/raven-go"
|
"github.com/getsentry/raven-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
timeout = 100 * time.Millisecond
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
severityMap = map[logrus.Level]raven.Severity{
|
severityMap = map[logrus.Level]raven.Severity{
|
||||||
logrus.DebugLevel: raven.DEBUG,
|
logrus.DebugLevel: raven.DEBUG,
|
||||||
|
@ -42,18 +38,24 @@ func getAndDel(d logrus.Fields, key string) (string, bool) {
|
||||||
|
|
||||||
// SentryHook delivers logs to a sentry server.
|
// SentryHook delivers logs to a sentry server.
|
||||||
type SentryHook struct {
|
type SentryHook struct {
|
||||||
|
// Timeout sets the time to wait for a delivery error from the sentry server.
|
||||||
|
// If this is set to zero the server will not wait for any response and will
|
||||||
|
// consider the message correctly sent
|
||||||
|
Timeout time.Duration
|
||||||
|
|
||||||
client *raven.Client
|
client *raven.Client
|
||||||
levels []logrus.Level
|
levels []logrus.Level
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSentryHook creates a hook to be added to an instance of logger
|
// NewSentryHook creates a hook to be added to an instance of logger
|
||||||
// and initializes the raven client.
|
// and initializes the raven client.
|
||||||
|
// This method sets the timeout to 100 milliseconds.
|
||||||
func NewSentryHook(DSN string, levels []logrus.Level) (*SentryHook, error) {
|
func NewSentryHook(DSN string, levels []logrus.Level) (*SentryHook, error) {
|
||||||
client, err := raven.NewClient(DSN, nil)
|
client, err := raven.NewClient(DSN, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &SentryHook{client, levels}, nil
|
return &SentryHook{100 * time.Millisecond, client, levels}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called when an event should be sent to sentry
|
// Called when an event should be sent to sentry
|
||||||
|
@ -79,6 +81,8 @@ func (hook *SentryHook) Fire(entry *logrus.Entry) error {
|
||||||
packet.Extra = map[string]interface{}(d)
|
packet.Extra = map[string]interface{}(d)
|
||||||
|
|
||||||
_, errCh := hook.client.Capture(packet, nil)
|
_, errCh := hook.client.Capture(packet, nil)
|
||||||
|
timeout := hook.Timeout
|
||||||
|
if timeout != 0 {
|
||||||
timeoutCh := time.After(timeout)
|
timeoutCh := time.After(timeout)
|
||||||
select {
|
select {
|
||||||
case err := <-errCh:
|
case err := <-errCh:
|
||||||
|
@ -86,6 +90,7 @@ func (hook *SentryHook) Fire(entry *logrus.Entry) error {
|
||||||
case <-timeoutCh:
|
case <-timeoutCh:
|
||||||
return fmt.Errorf("no response from sentry server in %s", timeout)
|
return fmt.Errorf("no response from sentry server in %s", timeout)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue