github.com/kata-containers/runtime@v0.0.0-20210505125100-04f29832a923/pkg/katautils/logger.go (about) 1 // Copyright (c) 2018 Intel Corporation 2 // Copyright (c) 2018 HyperHQ Inc. 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 // 6 7 package katautils 8 9 import ( 10 "context" 11 "log/syslog" 12 "time" 13 14 "github.com/sirupsen/logrus" 15 lSyslog "github.com/sirupsen/logrus/hooks/syslog" 16 ) 17 18 // Default our log level to 'Warn', rather than the logrus default 19 // of 'Info', which is rather noisy. 20 var originalLoggerLevel = logrus.WarnLevel 21 var kataUtilsLogger = logrus.NewEntry(logrus.New()) 22 23 // SetLogger sets the logger for the factory. 24 func SetLogger(ctx context.Context, logger *logrus.Entry, level logrus.Level) { 25 fields := logrus.Fields{ 26 "source": "katautils", 27 } 28 29 originalLoggerLevel = level 30 kataUtilsLogger = logger.WithFields(fields) 31 } 32 33 // sysLogHook wraps a syslog logrus hook and a formatter to be used for all 34 // syslog entries. 35 // 36 // This is necessary to allow the main logger (for "--log=") to use a custom 37 // formatter ("--log-format=") whilst allowing the system logger to use a 38 // different formatter. 39 type sysLogHook struct { 40 shook *lSyslog.SyslogHook 41 formatter logrus.Formatter 42 } 43 44 func (h *sysLogHook) Levels() []logrus.Level { 45 return h.shook.Levels() 46 } 47 48 // Fire is responsible for adding a log entry to the system log. It switches 49 // formatter before adding the system log entry, then reverts the original log 50 // formatter. 51 func (h *sysLogHook) Fire(e *logrus.Entry) (err error) { 52 formatter := e.Logger.Formatter 53 54 e.Logger.Formatter = h.formatter 55 56 err = h.shook.Fire(e) 57 58 e.Logger.Formatter = formatter 59 60 return err 61 } 62 63 func newSystemLogHook(network, raddr string) (*sysLogHook, error) { 64 hook, err := lSyslog.NewSyslogHook(network, raddr, syslog.LOG_INFO, name) 65 if err != nil { 66 return nil, err 67 } 68 69 return &sysLogHook{ 70 formatter: &logrus.TextFormatter{ 71 TimestampFormat: time.RFC3339Nano, 72 }, 73 shook: hook, 74 }, nil 75 } 76 77 // handleSystemLog sets up the system-level logger. 78 func handleSystemLog(network, raddr string) error { 79 hook, err := newSystemLogHook(network, raddr) 80 if err != nil { 81 return err 82 } 83 84 kataUtilsLogger.Logger.Hooks.Add(hook) 85 86 return nil 87 }