func Init()

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
}