in internal/logger/logger.go [105:149]
func Init(ctx context.Context, opts Options) error {
enabledLoggers, err := initPlatformLogger(ctx, opts.Ident, opts.Prefix)
if err != nil {
return fmt.Errorf("failed to initialize platform logger: %w", err)
}
galog.SetMinVerbosity(opts.Verbosity)
if opts.LogFile != "" && file.Exists(filepath.Dir(opts.LogFile), file.TypeDir) {
enabledLoggers = append(enabledLoggers, galog.NewFileBackend(opts.LogFile))
}
if opts.LogToStderr {
enabledLoggers = append(enabledLoggers, galog.NewStderrBackend(os.Stderr))
}
for _, logger := range enabledLoggers {
galog.RegisterBackend(ctx, logger)
}
if opts.LogToCloudLogging {
// We initialize and register the cloud logging backend in a lazy mode,
// meaning the cloud logging client will only be initialized when the
// metadata longpoll event is handled by initCloudLogging() subscriber.
be, err := galog.NewCloudBackend(ctx, galog.CloudLoggingInitModeLazy, nil)
galog.RegisterBackend(ctx, be)
if err != nil {
return fmt.Errorf("failed to initialize cloud logging: %w", err)
}
opts.cloudLoggingBackend = be
sub := events.EventSubscriber{Name: loggerMetadataSubscriberID, Data: &opts, Callback: initCloudLogging}
events.FetchManager().Subscribe(metadata.LongpollEvent, sub)
}
level, err := galog.ParseLevel(opts.Level)
if err != nil {
return fmt.Errorf("invalid log level: %w", err)
}
galog.SetLevel(level)
client.DebugLogging = opts.ACSClientDebugLogging
return nil
}