File: stderr_hook.go

package info (click to toggle)
golang-github-crc-org-crc 2.34.0%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,548 kB
  • sloc: sh: 398; makefile: 326; javascript: 40
file content (53 lines) | stat: -rw-r--r-- 1,042 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package logging

import (
	"io"
	"os"
	"runtime"

	"github.com/mattn/go-colorable"
	"github.com/sirupsen/logrus"
)

// This is stdErrHook to send error to the stdErr.
type stdErrHook struct {
	stderr    io.Writer
	formatter logrus.Formatter
	level     logrus.Level
}

func newstdErrHook(level logrus.Level, formatter logrus.Formatter) *stdErrHook {
	// For windows to display colors we need to use the go-colorable writer
	if runtime.GOOS == "windows" {
		return &stdErrHook{
			stderr:    colorable.NewColorableStderr(),
			formatter: formatter,
			level:     level,
		}
	}
	return &stdErrHook{
		stderr:    os.Stderr,
		formatter: formatter,
		level:     level,
	}
}

func (h stdErrHook) Levels() []logrus.Level {
	var levels []logrus.Level
	for _, level := range logrus.AllLevels {
		if level <= h.level {
			levels = append(levels, level)
		}
	}
	return levels
}

func (h *stdErrHook) Fire(entry *logrus.Entry) error {
	line, err := h.formatter.Format(entry)
	if err != nil {
		return err
	}

	_, err = h.stderr.Write(line)
	return err
}