| // TODO(dogben) Move slog impl to its own package. |
| package glog_and_cloud |
| |
| import ( |
| "os" |
| |
| _logger "github.com/jcgregorio/logger" |
| "github.com/jcgregorio/slog" |
| ) |
| |
| // CloudLoggerSLogImpl implements CloudLogger using slog.Logger. |
| type CloudLoggerSLogImpl struct { |
| stdLog slog.Logger |
| } |
| |
| // NewSLogCloudLogger returns a CloudLoggerSLogImpl that uses the given slog.Logger. |
| func NewSLogCloudLogger(l slog.Logger) *CloudLoggerSLogImpl { |
| return &CloudLoggerSLogImpl{ |
| stdLog: l, |
| } |
| } |
| |
| // SLogLogMode is the mode logging enum type. |
| type SLogLogMode int |
| |
| // Types of logging that NewSLogLogger supports. |
| const ( |
| SLogNone SLogLogMode = iota |
| SLogStderr |
| ) |
| |
| // NewSLogLogger creates a new CloudLoggerSLogImpl that either logs to stderr, or does |
| // no logging, depending upon the value of mode. It uses github.com/jcgregorio/logger |
| // to implement the slog.Logger interface. |
| // |
| // The return value implements CloudLogger. |
| // |
| // Usage: |
| // |
| // sklog.SetLogger(sklog.NewStdErrCloudLogger(logToStdErr)) |
| // |
| func NewStdErrCloudLogger(mode SLogLogMode) *CloudLoggerSLogImpl { |
| if mode == SLogStderr { |
| return NewSLogCloudLogger(_logger.NewFromOptions(&_logger.Options{ |
| SyncWriter: os.Stderr, |
| DepthDelta: 3, |
| })) |
| } else { |
| return NewSLogCloudLogger(_logger.NewNopLogger()) |
| } |
| } |
| |
| // See CloudLogger. |
| func (c *CloudLoggerSLogImpl) CloudLog(reportName string, payload *LogPayload) { |
| switch payload.Severity { |
| case DEBUG: |
| c.stdLog.Debug(payload.Payload) |
| case INFO: |
| c.stdLog.Info(payload.Payload) |
| case WARNING: |
| c.stdLog.Warning(payload.Payload) |
| case ERROR: |
| c.stdLog.Error(payload.Payload) |
| case CRITICAL, ALERT: |
| c.stdLog.Fatal(payload.Payload) |
| } |
| } |
| |
| // See CloudLogger. |
| func (c *CloudLoggerSLogImpl) Flush() { |
| _ = os.Stdout.Sync() |
| } |
| |
| // Assert that we implement the ClougLogger interface: |
| var _ CloudLogger = (*CloudLoggerSLogImpl)(nil) |