func()

in cli_tools/common/utils/logging/service/logger.go [224:264]


func (l *Logger) runWithServerLogging(function func() (Loggable, error),
	projectPointer *string) (*ComputeImageToolsLogExtension, error) {

	var logExtension *ComputeImageToolsLogExtension

	// Send log asynchronously. No need to interrupt the main flow when failed to send log, just
	// keep moving.
	var wg sync.WaitGroup

	wg.Add(1)
	go func() {
		defer wg.Done()
		l.logStart()
	}()

	loggable, err := runWithRecovery(function)
	l.updateParams(projectPointer)
	if err != nil {
		wg.Add(1)
		go func() {
			defer wg.Done()
			logExtension, _ = l.logFailure(err, loggable)

			// Remove new lines from multi-line failure messages as gcloud depends on
			// log prefix to filter out relevant log lines. Making this change in
			// daisy/error.go Error() func would potentially affect other clients of
			// Daisy with unclear consequences, thus limiting the change to
			// import/export wrappers
			log.Println(removeNewLinesFromMultilineError(logExtension.OutputInfo.FailureMessage))
		}()
	} else {
		wg.Add(1)
		go func() {
			defer wg.Done()
			logExtension, _ = l.logSuccess(loggable)
		}()
	}

	wg.Wait()
	return logExtension, err
}