github.com/nya3jp/tast@v0.0.0-20230601000426-85c8e4d83a9b/src/go.chromium.org/tast/core/internal/logging/syslog.go (about)

     1  // Copyright 2021 The ChromiumOS Authors
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file.
     4  
     5  package logging
     6  
     7  import (
     8  	"log/syslog"
     9  	"os"
    10  	"path/filepath"
    11  	"time"
    12  )
    13  
    14  // SyslogLogger is a Logger that routes logs to syslog.
    15  type SyslogLogger struct {
    16  	w *syslog.Writer
    17  }
    18  
    19  var _ Logger = &SyslogLogger{}
    20  
    21  // NewSyslogLogger creates a new SyslogLogger.
    22  // It returns an error if it fails to connect to the syslog endpoint.
    23  func NewSyslogLogger() (*SyslogLogger, error) {
    24  	w, err := syslog.New(syslog.LOG_DEBUG, filepath.Base(os.Args[0]))
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  	return &SyslogLogger{w}, nil
    29  }
    30  
    31  // Close closes the underlying connection to the syslog endpoint.
    32  func (l *SyslogLogger) Close() error {
    33  	return l.w.Close()
    34  }
    35  
    36  // Log sends a log to syslog.
    37  func (l *SyslogLogger) Log(level Level, ts time.Time, msg string) {
    38  	switch level {
    39  	case LevelInfo:
    40  		l.w.Info(msg)
    41  	case LevelDebug:
    42  		l.w.Debug(msg)
    43  	}
    44  }