mirror of
				https://gitea.com/gitea/act_runner.git
				synced 2025-10-31 04:47:58 +01:00 
			
		
		
		
	Report errors by setting raw_output when it's error level (#645)
This solves #643 by setting the "raw_output" entry attribute when the log level is error. This results in the log line being shipped to the Gitea UI. Reviewed-on: https://gitea.com/gitea/act_runner/pulls/645 Reviewed-by: Zettat123 <zettat123@noreply.gitea.com> Co-authored-by: Pablo Carranza <pcarranza@gmail.com> Co-committed-by: Pablo Carranza <pcarranza@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Lunny Xiao
						Lunny Xiao
					
				
			
			
				
	
			
			
			
						parent
						
							5302c25feb
						
					
				
				
					commit
					6a9a447f86
				
			| @@ -160,39 +160,46 @@ type daemonArgs struct { | ||||
|  | ||||
| // initLogging setup the global logrus logger. | ||||
| func initLogging(cfg *config.Config) { | ||||
| 	callPrettyfier := func(f *runtime.Frame) (string, string) { | ||||
| 		// get function name | ||||
| 		s := strings.Split(f.Function, ".") | ||||
| 		funcname := "[" + s[len(s)-1] + "]" | ||||
| 		// get file name and line number | ||||
| 		_, filename := path.Split(f.File) | ||||
| 		filename = "[" + filename + ":" + strconv.Itoa(f.Line) + "]" | ||||
| 		return funcname, filename | ||||
| 	} | ||||
|  | ||||
| 	isTerm := isatty.IsTerminal(os.Stdout.Fd()) | ||||
| 	format := &log.TextFormatter{ | ||||
| 		DisableColors: !isTerm, | ||||
| 		FullTimestamp: true, | ||||
| 		DisableColors:    !isTerm, | ||||
| 		FullTimestamp:    true, | ||||
| 		CallerPrettyfier: callPrettyfier, | ||||
| 	} | ||||
| 	log.SetFormatter(format) | ||||
|  | ||||
| 	if l := cfg.Log.Level; l != "" { | ||||
| 		level, err := log.ParseLevel(l) | ||||
| 		if err != nil { | ||||
| 			log.WithError(err). | ||||
| 				Errorf("invalid log level: %q", l) | ||||
| 		} | ||||
| 	l := cfg.Log.Level | ||||
| 	if l == "" { | ||||
| 		log.Infof("Log level not set, sticking to info") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 		// debug level | ||||
| 		if level == log.DebugLevel { | ||||
| 			log.SetReportCaller(true) | ||||
| 			format.CallerPrettyfier = func(f *runtime.Frame) (string, string) { | ||||
| 				// get function name | ||||
| 				s := strings.Split(f.Function, ".") | ||||
| 				funcname := "[" + s[len(s)-1] + "]" | ||||
| 				// get file name and line number | ||||
| 				_, filename := path.Split(f.File) | ||||
| 				filename = "[" + filename + ":" + strconv.Itoa(f.Line) + "]" | ||||
| 				return funcname, filename | ||||
| 			} | ||||
| 			log.SetFormatter(format) | ||||
| 		} | ||||
| 	level, err := log.ParseLevel(l) | ||||
| 	if err != nil { | ||||
| 		log.WithError(err). | ||||
| 			Errorf("invalid log level: %q", l) | ||||
| 	} | ||||
|  | ||||
| 		if log.GetLevel() != level { | ||||
| 			log.Infof("log level changed to %v", level) | ||||
| 			log.SetLevel(level) | ||||
| 		} | ||||
| 	// debug level | ||||
| 	switch level { | ||||
| 	case log.DebugLevel, log.TraceLevel: | ||||
| 		log.SetReportCaller(true) // Only in debug or trace because it takes a performance toll | ||||
| 		log.Infof("Log level %s requested, setting up report caller for further debugging", level) | ||||
| 	} | ||||
|  | ||||
| 	if log.GetLevel() != level { | ||||
| 		log.Infof("log level set to %v", level) | ||||
| 		log.SetLevel(level) | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -143,6 +143,12 @@ func (r *Reporter) Fire(entry *log.Entry) error { | ||||
| 	if step.StartedAt == nil { | ||||
| 		step.StartedAt = timestamppb.New(timestamp) | ||||
| 	} | ||||
|  | ||||
| 	// Force reporting log errors as raw output to prevent silent failures | ||||
| 	if entry.Level == log.ErrorLevel { | ||||
| 		entry.Data["raw_output"] = true | ||||
| 	} | ||||
|  | ||||
| 	if v, ok := entry.Data["raw_output"]; ok { | ||||
| 		if rawOutput, ok := v.(bool); ok && rawOutput { | ||||
| 			if row := r.parseLogRow(entry); row != nil { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user