diff --git a/commands/configtest.go b/commands/configtest.go index dfe94b2a..eb0b41ea 100644 --- a/commands/configtest.go +++ b/commands/configtest.go @@ -20,8 +20,10 @@ package commands import ( "context" "flag" + "fmt" "os" "path/filepath" + "strings" "github.com/google/subcommands" @@ -98,7 +100,7 @@ func (p *ConfigtestCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interfa util.Log = util.NewCustomLogger(c.ServerInfo{}) if err := mkdirDotVuls(); err != nil { - util.Log.Errorf("Failed to create .vuls: %s", err) + util.Log.Errorf("Failed to create .vuls. err: %+v", err) return subcommands.ExitUsageError } @@ -114,9 +116,12 @@ func (p *ConfigtestCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interfa err = c.Load(p.configPath, keyPass) if err != nil { - util.Log.Errorf("Error loading %s, %s", p.configPath, err) - util.Log.Errorf("If you update Vuls and get this error, there may be incompatible changes in config.toml") - util.Log.Errorf("Please check README: https://github.com/future-architect/vuls#configuration") + msg := []string{ + fmt.Sprintf("Error loading %s", p.configPath), + "If you update Vuls and get this error, there may be incompatible changes in config.toml", + "Please check README: https://github.com/future-architect/vuls#configuration", + } + util.Log.Errorf("%s\n%+v", strings.Join(msg, "\n"), err) return subcommands.ExitUsageError } @@ -151,13 +156,13 @@ func (p *ConfigtestCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interfa util.Log.Info("Detecting Server/Container OS... ") if err := scan.InitServers(p.timeoutSec); err != nil { - util.Log.Errorf("Failed to init servers: %s", err) + util.Log.Errorf("Failed to init servers. err: %+v", err) return subcommands.ExitFailure } util.Log.Info("Checking Scan Modes...") if err := scan.CheckScanModes(); err != nil { - util.Log.Errorf("Fix config.toml: %s", err) + util.Log.Errorf("Fix config.toml. err: %+v", err) return subcommands.ExitFailure } diff --git a/commands/report.go b/commands/report.go index 1b3691c5..9e1e61e7 100644 --- a/commands/report.go +++ b/commands/report.go @@ -209,7 +209,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} cvelog.SetLogger(c.Conf.LogDir, false, c.Conf.Debug, false) if err := c.Load(p.configPath, ""); err != nil { - util.Log.Errorf("Error loading %s, %s", p.configPath, err) + util.Log.Errorf("Error loading %s, %+v", p.configPath, err) return subcommands.ExitUsageError } @@ -227,7 +227,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} dir, err = report.JSONDir(f.Args()) } if err != nil { - util.Log.Errorf("Failed to read from JSON: %s", err) + util.Log.Errorf("Failed to read from JSON: %+v", err) return subcommands.ExitFailure } @@ -276,7 +276,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.ToS3 { if err := report.CheckIfBucketExists(); err != nil { - util.Log.Errorf("Check if there is a bucket beforehand: %s, err: %s", + util.Log.Errorf("Check if there is a bucket beforehand: %s, err: %+v", c.Conf.AWS.S3Bucket, err) return subcommands.ExitUsageError } @@ -297,7 +297,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} return subcommands.ExitUsageError } if err := report.CheckIfAzureContainerExists(); err != nil { - util.Log.Errorf("Check if there is a container beforehand: %s, err: %s", + util.Log.Errorf("Check if there is a container beforehand: %s, err: %+v", c.Conf.Azure.ContainerName, err) return subcommands.ExitUsageError } @@ -348,7 +348,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.UUID { // Ensure UUIDs of scan target servers in config.toml if err := report.EnsureUUIDs(p.configPath, res); err != nil { - util.Log.Errorf("Failed to ensure UUIDs: %s", err) + util.Log.Errorf("Failed to ensure UUIDs. err: %+v", err) return subcommands.ExitFailure } } @@ -361,7 +361,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.CveDict.URL != "" { if err := report.CveClient.CheckHealth(); err != nil { - util.Log.Errorf("CVE HTTP server is not running. err: %s", err) + util.Log.Errorf("CVE HTTP server is not running. err: %+v", err) util.Log.Errorf("Run go-cve-dictionary as server mode before reporting or run with `-cvedb-type=sqlite3 -cvedb-sqlite3-path` option instead of -cvedb-url") return subcommands.ExitFailure } @@ -370,7 +370,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.OvalDict.URL != "" { err := oval.Base{}.CheckHTTPHealth() if err != nil { - util.Log.Errorf("OVAL HTTP server is not running. err: %s", err) + util.Log.Errorf("OVAL HTTP server is not running. err: %+v", err) util.Log.Errorf("Run goval-dictionary as server mode before reporting or run with `-ovaldb-type=sqlite3 -ovaldb-sqlite3-path` option instead of -ovaldb-url") return subcommands.ExitFailure } @@ -380,7 +380,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} util.Log.Infof("gost: %s", c.Conf.Gost.URL) err := gost.Base{}.CheckHTTPHealth() if err != nil { - util.Log.Errorf("gost HTTP server is not running. err: %s", err) + util.Log.Errorf("gost HTTP server is not running. err: %+v", err) util.Log.Errorf("Run gost as server mode before reporting or run with `-gostdb-type=sqlite3 -gostdb-sqlite3-path` option instead of -gostdb-url") return subcommands.ExitFailure } @@ -389,7 +389,7 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.Exploit.URL != "" { err := exploit.CheckHTTPHealth() if err != nil { - util.Log.Errorf("exploit HTTP server is not running. err: %s", err) + util.Log.Errorf("exploit HTTP server is not running. err: %+v", err) util.Log.Errorf("Run go-exploitdb as server mode before reporting") return subcommands.ExitFailure } @@ -402,24 +402,24 @@ func (p *ReportCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} DebugSQL: c.Conf.DebugSQL, }) if locked { - util.Log.Errorf("SQLite3 is locked. Close other DB connections and try again: %s", err) + util.Log.Errorf("SQLite3 is locked. Close other DB connections and try again. err: %+v", err) return subcommands.ExitFailure } if err != nil { - util.Log.Errorf("Failed to init DB Clients: %s", err) + util.Log.Errorf("Failed to init DB Clients. err: %+v", err) return subcommands.ExitFailure } defer dbclient.CloseDB() if res, err = report.FillCveInfos(*dbclient, res, dir); err != nil { - util.Log.Error(err) + util.Log.Errorf("%+v", err) return subcommands.ExitFailure } } for _, w := range reports { if err := w.Write(res...); err != nil { - util.Log.Errorf("Failed to report: %s", err) + util.Log.Errorf("Failed to report. err: %+v", err) return subcommands.ExitFailure } } diff --git a/commands/scan.go b/commands/scan.go index b037a555..3a6ded7b 100644 --- a/commands/scan.go +++ b/commands/scan.go @@ -126,7 +126,7 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) util.Log = util.NewCustomLogger(c.ServerInfo{}) if err := mkdirDotVuls(); err != nil { - util.Log.Errorf("Failed to create .vuls: %s", err) + util.Log.Errorf("Failed to create .vuls. err: %+v", err) return subcommands.ExitUsageError } @@ -142,9 +142,12 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) err = c.Load(p.configPath, keyPass) if err != nil { - util.Log.Errorf("Error loading %s, %s", p.configPath, err) - util.Log.Errorf("If you update Vuls and get this error, there may be incompatible changes in config.toml") - util.Log.Errorf("Please check README: https://github.com/future-architect/vuls#configuration") + msg := []string{ + fmt.Sprintf("Error loading %s", p.configPath), + "If you update Vuls and get this error, there may be incompatible changes in config.toml", + "Please check README: https://github.com/future-architect/vuls#configuration", + } + util.Log.Errorf("%s\n%+v", strings.Join(msg, "\n"), err) return subcommands.ExitUsageError } @@ -157,7 +160,7 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) } else if c.Conf.Pipe { bytes, err := ioutil.ReadAll(os.Stdin) if err != nil { - util.Log.Errorf("Failed to read stdin: %s", err) + util.Log.Errorf("Failed to read stdin. err: %+v", err) return subcommands.ExitFailure } fields := strings.Fields(string(bytes)) @@ -193,13 +196,13 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) util.Log.Info("Detecting Server/Container OS... ") if err := scan.InitServers(p.timeoutSec); err != nil { - util.Log.Errorf("Failed to init servers: %s", err) + util.Log.Errorf("Failed to init servers: %+v", err) return subcommands.ExitFailure } util.Log.Info("Checking Scan Modes... ") if err := scan.CheckScanModes(); err != nil { - util.Log.Errorf("Fix config.toml: %s", err) + util.Log.Errorf("Fix config.toml. err: %+v", err) return subcommands.ExitFailure } @@ -208,7 +211,7 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) util.Log.Info("Scanning vulnerabilities... ") if err := scan.Scan(p.scanTimeoutSec); err != nil { - util.Log.Errorf("Failed to scan. err: %s", err) + util.Log.Errorf("Failed to scan. err: %+v", err) return subcommands.ExitFailure } fmt.Printf("\n\n\n") diff --git a/commands/server.go b/commands/server.go index 98dd46b3..930e67a3 100644 --- a/commands/server.go +++ b/commands/server.go @@ -152,7 +152,7 @@ func (p *ServerCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} cvelog.SetLogger(c.Conf.LogDir, false, c.Conf.Debug, false) if err := c.Load(p.configPath, ""); err != nil { - util.Log.Errorf("Error loading %s, %s", p.configPath, err) + util.Log.Errorf("Error loading %s. err: %+v", p.configPath, err) return subcommands.ExitUsageError } @@ -173,7 +173,7 @@ func (p *ServerCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.CveDict.URL != "" { if err := report.CveClient.CheckHealth(); err != nil { - util.Log.Errorf("CVE HTTP server is not running. err: %s", err) + util.Log.Errorf("CVE HTTP server is not running. err: %+v", err) util.Log.Errorf("Run go-cve-dictionary as server mode before reporting or run with `-cvedb-type=sqlite3 -cvedb-sqlite3-path` option instead of -cvedb-url") return subcommands.ExitFailure } @@ -192,7 +192,7 @@ func (p *ServerCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} util.Log.Infof("gost: %s", c.Conf.Gost.URL) err := gost.Base{}.CheckHTTPHealth() if err != nil { - util.Log.Errorf("gost HTTP server is not running. err: %s", err) + util.Log.Errorf("gost HTTP server is not running. err: %+v", err) util.Log.Errorf("Run gost as server mode before reporting or run with `-gostdb-type=sqlite3 -gostdb-sqlite3-path` option instead of -gostdb-url") return subcommands.ExitFailure } @@ -201,7 +201,7 @@ func (p *ServerCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} if c.Conf.Exploit.URL != "" { err := exploit.CheckHTTPHealth() if err != nil { - util.Log.Errorf("exploit HTTP server is not running. err: %s", err) + util.Log.Errorf("exploit HTTP server is not running. err: %+v", err) util.Log.Errorf("Run go-exploitdb as server mode before reporting") return subcommands.ExitFailure } @@ -215,12 +215,12 @@ func (p *ServerCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} DebugSQL: c.Conf.DebugSQL, }) if locked { - util.Log.Errorf("SQLite3 is locked. Close other DB connections and try again: %s", err) + util.Log.Errorf("SQLite3 is locked. Close other DB connections and try again: %+v", err) return subcommands.ExitFailure } if err != nil { - util.Log.Errorf("Failed to init DB Clients: %s", err) + util.Log.Errorf("Failed to init DB Clients. err: %+v", err) return subcommands.ExitFailure } @@ -232,7 +232,7 @@ func (p *ServerCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{} }) util.Log.Infof("Listening on %s", p.listen) if err := http.ListenAndServe(p.listen, nil); err != nil { - util.Log.Errorf("Failed to start server: %s", err) + util.Log.Errorf("Failed to start server. err: %+v", err) return subcommands.ExitFailure } return subcommands.ExitSuccess diff --git a/commands/tui.go b/commands/tui.go index dd99a1e3..fe3936de 100644 --- a/commands/tui.go +++ b/commands/tui.go @@ -149,7 +149,7 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s cvelog.SetLogger(c.Conf.LogDir, false, c.Conf.Debug, false) if err := c.Load(p.configPath, ""); err != nil { - util.Log.Errorf("Error loading %s, %s", p.configPath, err) + util.Log.Errorf("Error loading %s, err: %+v", p.configPath, err) return subcommands.ExitUsageError } @@ -166,7 +166,7 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s dir, err = report.JSONDir(f.Args()) } if err != nil { - util.Log.Errorf("Failed to read from JSON: %s", err) + util.Log.Errorf("Failed to read from JSON. err: %+v", err) return subcommands.ExitFailure } @@ -189,7 +189,7 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s if c.Conf.CveDict.URL != "" { if err := report.CveClient.CheckHealth(); err != nil { - util.Log.Errorf("CVE HTTP server is not running. err: %s", err) + util.Log.Errorf("CVE HTTP server is not running. err: %+v", err) util.Log.Errorf("Run go-cve-dictionary as server mode before reporting or run with `-cvedb-type=sqlite3 -cvedb-sqlite3-path` option instead of -cvedb-url") return subcommands.ExitFailure } @@ -198,7 +198,7 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s if c.Conf.OvalDict.URL != "" { err := oval.Base{}.CheckHTTPHealth() if err != nil { - util.Log.Errorf("OVAL HTTP server is not running. err: %s", err) + util.Log.Errorf("OVAL HTTP server is not running. err: %+v", err) util.Log.Errorf("Run goval-dictionary as server mode before reporting or run with `-ovaldb-type=sqlite3 -ovaldb-sqlite3-path` option instead of -ovaldb-url") return subcommands.ExitFailure } @@ -208,7 +208,7 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s util.Log.Infof("gost: %s", c.Conf.Gost.URL) err := gost.Base{}.CheckHTTPHealth() if err != nil { - util.Log.Errorf("gost HTTP server is not running. err: %s", err) + util.Log.Errorf("gost HTTP server is not running. err: %+v", err) util.Log.Errorf("Run gost as server mode before reporting or run with `-gostdb-type=sqlite3 -gostdb-sqlite3-path` option instead of -gostdb-url") return subcommands.ExitFailure } @@ -217,7 +217,7 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s if c.Conf.Exploit.URL != "" { err := exploit.CheckHTTPHealth() if err != nil { - util.Log.Errorf("exploit HTTP server is not running. err: %s", err) + util.Log.Errorf("exploit HTTP server is not running. err: %+v", err) util.Log.Errorf("Run go-exploitdb as server mode before reporting") return subcommands.ExitFailure } @@ -230,12 +230,12 @@ func (p *TuiCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s DebugSQL: c.Conf.DebugSQL, }) if locked { - util.Log.Errorf("SQLite3 is locked. Close other DB connections and try again: %s", err) + util.Log.Errorf("SQLite3 is locked. Close other DB connections and try again: %+v", err) return subcommands.ExitFailure } if err != nil { - util.Log.Errorf("Failed to init DB Clients: %s", err) + util.Log.Errorf("Failed to init DB Clients. err: %+v", err) return subcommands.ExitFailure } diff --git a/github/github.go b/github/github.go index a4c1ff2b..dee5bd9b 100644 --- a/github/github.go +++ b/github/github.go @@ -30,6 +30,7 @@ import ( "github.com/future-architect/vuls/util" "github.com/k0kubun/pp" "golang.org/x/oauth2" + "golang.org/x/xerrors" ) // FillGitHubSecurityAlerts access to owner/repo on GitHub and fetch scurity alerts of the repository via GitHub API v4 GraphQL and then set to the given ScanResult. @@ -73,6 +74,9 @@ func FillGitHubSecurityAlerts(r *models.ScanResult, owner, repo, token string) ( } util.Log.Debugf("%s", pp.Sprint(alerts)) + if alerts.Data.Repository.URL == "" { + return 0, xerrors.Errorf("Failed to access to GitHub API. Response: %#v", alerts) + } for _, v := range alerts.Data.Repository.VulnerabilityAlerts.Edges { if config.Conf.IgnoreGitHubDismissed && v.Node.DismissReason != "" { diff --git a/models/scanresults.go b/models/scanresults.go index f6366d11..9e93a868 100644 --- a/models/scanresults.go +++ b/models/scanresults.go @@ -222,7 +222,7 @@ func (r ScanResult) FilterIgnorePkgs() ScanResult { for _, pkgRegexp := range ignorePkgsRegexps { re, err := regexp.Compile(pkgRegexp) if err != nil { - util.Log.Errorf("Faild to parse %s, %s", pkgRegexp, err) + util.Log.Errorf("Faild to parse %s. err: %+v", pkgRegexp, err) continue } else { regexps = append(regexps, re) diff --git a/report/db_client.go b/report/db_client.go index fbf4d45b..c5a54b53 100644 --- a/report/db_client.go +++ b/report/db_client.go @@ -139,7 +139,7 @@ func NewGostDB(cnf DBClientConf) (driver gostdb.DB, locked bool, err error) { util.Log.Debugf("Open gost db (%s): %s", cnf.GostCnf.Type, path) if driver, locked, err = gostdb.NewDB(cnf.GostCnf.Type, path, cnf.DebugSQL); err != nil { if locked { - util.Log.Errorf("gostDB is locked: %s", err) + util.Log.Errorf("gostDB is locked. err: %+v", err) return nil, true, err } return nil, false, err @@ -165,7 +165,7 @@ func NewExploitDB(cnf DBClientConf) (driver exploitdb.DB, locked bool, err error util.Log.Debugf("Open exploit db (%s): %s", cnf.ExploitCnf.Type, path) if driver, locked, err = exploitdb.NewDB(cnf.ExploitCnf.Type, path, cnf.DebugSQL); err != nil { if locked { - util.Log.Errorf("exploitDB is locked: %s", err) + util.Log.Errorf("exploitDB is locked. err: %+v", err) return nil, true, err } return nil, false, err @@ -177,12 +177,12 @@ func NewExploitDB(cnf DBClientConf) (driver exploitdb.DB, locked bool, err error func (d DBClient) CloseDB() { if d.CveDB != nil { if err := d.CveDB.CloseDB(); err != nil { - util.Log.Errorf("Failed to close DB: %s", err) + util.Log.Errorf("Failed to close DB. err: %+v", err) } } if d.OvalDB != nil { if err := d.OvalDB.CloseDB(); err != nil { - util.Log.Errorf("Failed to close DB: %s", err) + util.Log.Errorf("Failed to close DB. err: %+v", err) } } } diff --git a/report/report.go b/report/report.go index c131c0d4..ffea24f8 100644 --- a/report/report.go +++ b/report/report.go @@ -186,7 +186,7 @@ func FillCveInfo(dbclient DBClient, r *models.ScanResult, cpeURIs []string, inte ints := &integrationResults{} for _, o := range integrations { if err = o.apply(r, ints); err != nil { - return err + return xerrors.Errorf("Failed to fill with integration: %w", err) } } util.Log.Infof("%s: %d CVEs are detected with GitHub Security Alerts", r.FormatServerName(), ints.GithubAlertsCveCounts) diff --git a/report/saas.go b/report/saas.go index 50c746ca..630461e4 100644 --- a/report/saas.go +++ b/report/saas.go @@ -67,7 +67,7 @@ func (w SaasWriter) Write(rs ...models.ScanResult) (err error) { ipv4s, ipv6s, err := util.IP() if err != nil { - util.Log.Errorf("Failed to fetch scannedIPs: %s", err) + util.Log.Errorf("Failed to fetch scannedIPs. err: %+v", err) } hostname, _ := os.Hostname() diff --git a/report/tui.go b/report/tui.go index 0e3b4105..4cda1ccd 100644 --- a/report/tui.go +++ b/report/tui.go @@ -56,14 +56,14 @@ func RunTui(results models.ScanResults) subcommands.ExitStatus { g, err := gocui.NewGui(gocui.OutputNormal) if err != nil { - util.Log.Errorf("%s", err) + util.Log.Errorf("%+v", err) return subcommands.ExitFailure } defer g.Close() g.SetManagerFunc(layout) if err := keybindings(g); err != nil { - util.Log.Errorf("%s", err) + util.Log.Errorf("%+v", err) return subcommands.ExitFailure } g.SelBgColor = gocui.ColorGreen @@ -72,7 +72,7 @@ func RunTui(results models.ScanResults) subcommands.ExitStatus { if err := g.MainLoop(); err != nil { g.Close() - util.Log.Errorf("%s", err) + util.Log.Errorf("%+v", err) os.Exit(1) } return subcommands.ExitSuccess diff --git a/report/util.go b/report/util.go index 7b6d9591..bcccbedd 100644 --- a/report/util.go +++ b/report/util.go @@ -399,7 +399,7 @@ func loadPrevious(currs models.ScanResults) (prevs models.ScanResults, err error path := filepath.Join(dir, filename) r, err := loadOneServerScanResult(path) if err != nil { - util.Log.Errorf("%s", err) + util.Log.Errorf("%+v", err) continue } if r.Family == result.Family && r.Release == result.Release { diff --git a/scan/executil.go b/scan/executil.go index ad7811fd..8c7c329e 100644 --- a/scan/executil.go +++ b/scan/executil.go @@ -125,11 +125,7 @@ func parallelExec(fn func(osTypeInterface) error, timeoutSec ...int) { if len(s.getErrs()) == 0 { successes = append(successes, s) } else { - fmtstr := "Error on %s, err: %s" - if conf.Conf.Debug { - fmtstr = "Error: %s, err: %+v" - } - util.Log.Errorf(fmtstr, + util.Log.Errorf("Error on %s, err: %+v", s.getServerInfo().GetServerName(), s.getErrs()) errServers = append(errServers, s) } @@ -150,10 +146,10 @@ func parallelExec(fn func(osTypeInterface) error, timeoutSec ...int) { } } if !found { - msg := fmt.Sprintf("Timed out: %s", + err := xerrors.Errorf("Timed out: %s", s.getServerInfo().GetServerName()) - util.Log.Errorf(msg) - s.setErrs([]error{xerrors.New(msg)}) + util.Log.Errorf("%+v", err) + s.setErrs([]error{err}) errServers = append(errServers, s) } } diff --git a/scan/serverapi.go b/scan/serverapi.go index cacf193c..64c2d5c0 100644 --- a/scan/serverapi.go +++ b/scan/serverapi.go @@ -215,7 +215,7 @@ func detectServerOSes(timeoutSec int) (servers, errServers []osTypeInterface) { case res := <-osTypeChan: if 0 < len(res.getErrs()) { errServers = append(errServers, res) - util.Log.Errorf("(%d/%d) Failed: %s, err: %s", + util.Log.Errorf("(%d/%d) Failed: %s, err: %+v", i+1, len(config.Conf.Servers), res.getServerInfo().ServerName, res.getErrs()) @@ -279,7 +279,7 @@ func detectContainerOSes(timeoutSec int) (actives, inactives []osTypeInterface) sinfo := osi.getServerInfo() if 0 < len(osi.getErrs()) { inactives = append(inactives, osi) - util.Log.Errorf("Failed: %s err: %s", sinfo.ServerName, osi.getErrs()) + util.Log.Errorf("Failed: %s err: %+v", sinfo.ServerName, osi.getErrs()) continue } actives = append(actives, osi) @@ -600,7 +600,7 @@ func scanVulns(jsonDir string, scannedAt time.Time, timeoutSec int) error { hostname, _ := os.Hostname() ipv4s, ipv6s, err := util.IP() if err != nil { - util.Log.Errorf("Failed to fetch scannedIPs: %s", err) + util.Log.Errorf("Failed to fetch scannedIPs. err: %+v", err) } for _, s := range append(servers, errServers...) { diff --git a/server/server.go b/server/server.go index 996156a2..06ff9641 100644 --- a/server/server.go +++ b/server/server.go @@ -87,7 +87,7 @@ func (h VulsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } dir, err := scan.EnsureResultDir(scannedAt) if err != nil { - util.Log.Errorf("Failed to ensure the result directory: %s", err) + util.Log.Errorf("Failed to ensure the result directory: %+v", err) http.Error(w, err.Error(), http.StatusServiceUnavailable) return } @@ -99,7 +99,7 @@ func (h VulsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { for _, w := range reports { if err := w.Write(result); err != nil { - util.Log.Errorf("Failed to report: %s", err) + util.Log.Errorf("Failed to report. err: %+v", err) return } }