Reviewed-on: #45 Co-authored-by: Boming Zhang <bomingzh@sjtu.edu.cn> Co-committed-by: Boming Zhang <bomingzh@sjtu.edu.cn>
This commit is contained in:
parent
28bf70d0a9
commit
049a5e6e7e
|
@ -15,7 +15,7 @@ import (
|
|||
type Conf struct {
|
||||
SandboxExecServer string `default:"localhost:5051"`
|
||||
SandboxToken string `default:""`
|
||||
LogLevel int `default:"0"`
|
||||
LogPath string `default:""`
|
||||
OutputPath string `default:"joj3_result.json"`
|
||||
Stages []struct {
|
||||
Name string
|
||||
|
|
74
cmd/joj3/log.go
Normal file
74
cmd/joj3/log.go
Normal file
|
@ -0,0 +1,74 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
)
|
||||
|
||||
type multiHandler struct {
|
||||
handlers []slog.Handler
|
||||
}
|
||||
|
||||
func (h *multiHandler) Enabled(ctx context.Context, level slog.Level) bool {
|
||||
for _, handler := range h.handlers {
|
||||
if handler.Enabled(ctx, level) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (h *multiHandler) Handle(ctx context.Context, r slog.Record) error {
|
||||
for _, handler := range h.handlers {
|
||||
if handler.Enabled(ctx, r.Level) {
|
||||
if err := handler.Handle(ctx, r); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *multiHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||
handlers := make([]slog.Handler, len(h.handlers))
|
||||
for i, handler := range h.handlers {
|
||||
handlers[i] = handler.WithAttrs(attrs)
|
||||
}
|
||||
return &multiHandler{handlers: handlers}
|
||||
}
|
||||
|
||||
func (h *multiHandler) WithGroup(name string) slog.Handler {
|
||||
handlers := make([]slog.Handler, len(h.handlers))
|
||||
for i, handler := range h.handlers {
|
||||
handlers[i] = handler.WithGroup(name)
|
||||
}
|
||||
return &multiHandler{handlers: handlers}
|
||||
}
|
||||
|
||||
func setupSlog(logPath string) error {
|
||||
handlers := []slog.Handler{}
|
||||
if logPath != "" {
|
||||
// File handler for debug logs
|
||||
debugFile, err := os.OpenFile(logPath,
|
||||
os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o600)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
debugHandler := slog.NewTextHandler(debugFile, &slog.HandlerOptions{
|
||||
Level: slog.LevelDebug,
|
||||
})
|
||||
handlers = append(handlers, debugHandler)
|
||||
}
|
||||
// Stderr handler for info logs and above
|
||||
stderrHandler := slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
|
||||
Level: slog.LevelInfo,
|
||||
})
|
||||
handlers = append(handlers, stderrHandler)
|
||||
// Create a multi-handler
|
||||
multiHandler := &multiHandler{handlers: handlers}
|
||||
// Set the default logger
|
||||
logger := slog.New(multiHandler)
|
||||
slog.SetDefault(logger)
|
||||
return nil
|
||||
}
|
|
@ -15,15 +15,6 @@ import (
|
|||
"github.com/jinzhu/copier"
|
||||
)
|
||||
|
||||
func setupSlog(logLevel int) {
|
||||
lvl := new(slog.LevelVar)
|
||||
lvl.Set(slog.Level(logLevel))
|
||||
opts := &slog.HandlerOptions{Level: lvl}
|
||||
handler := slog.NewTextHandler(os.Stderr, opts)
|
||||
logger := slog.New(handler)
|
||||
slog.SetDefault(logger)
|
||||
}
|
||||
|
||||
func getCommitMsg() (msg string, err error) {
|
||||
r, err := git.PlainOpen(".")
|
||||
if err != nil {
|
||||
|
@ -104,7 +95,9 @@ func init() {
|
|||
}
|
||||
|
||||
func mainImpl() error {
|
||||
setupSlog(int(slog.LevelInfo)) // before conf is loaded
|
||||
if err := setupSlog(""); err != nil { // before conf is loaded
|
||||
return err
|
||||
}
|
||||
flag.Parse()
|
||||
if *showVersion {
|
||||
fmt.Println(Version)
|
||||
|
@ -123,7 +116,9 @@ func mainImpl() error {
|
|||
slog.Error("no conf found", "error", err)
|
||||
return err
|
||||
}
|
||||
setupSlog(conf.LogLevel) // after conf is loaded
|
||||
if err := setupSlog(conf.LogPath); err != nil { // after conf is loaded
|
||||
return err
|
||||
}
|
||||
executors.InitWithConf(conf.SandboxExecServer, conf.SandboxToken)
|
||||
stages, err := generateStages(conf)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in New Issue
Block a user