From 44d2057df844209fc30b64c1a4cc588f1471e9f4 Mon Sep 17 00:00:00 2001
From: Christian Schwarz <me@cschwarz.com>
Date: Fri, 19 Oct 2018 17:15:24 +0200
Subject: [PATCH] client/configcheck: check logging config

---
 client/configcheck.go | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/client/configcheck.go b/client/configcheck.go
index 93620e4..77d3699 100644
--- a/client/configcheck.go
+++ b/client/configcheck.go
@@ -10,6 +10,8 @@ import (
 	"github.com/zrepl/zrepl/cli"
 	"github.com/zrepl/zrepl/config"
 	"github.com/zrepl/zrepl/daemon/job"
+	"github.com/zrepl/zrepl/daemon/logging"
+	"github.com/zrepl/zrepl/logger"
 	"os"
 )
 
@@ -23,7 +25,7 @@ var ConfigcheckCmd = &cli.Subcommand{
 	Short: "check if config can be parsed without errors",
 	SetupFlags: func(f *pflag.FlagSet) {
 		f.StringVar(&configcheckArgs.format, "format", "", "dump parsed config object [pretty|yaml|json]")
-		f.StringVar(&configcheckArgs.what, "what", "all", "what to print [all|config|jobs]")
+		f.StringVar(&configcheckArgs.what, "what", "all", "what to print [all|config|jobs|logging]")
 	},
 	Run: func(subcommand *cli.Subcommand, args []string) error {
 		formatMap := map[string]func(interface{}) {
@@ -56,14 +58,30 @@ var ConfigcheckCmd = &cli.Subcommand{
 			}
 		}
 
+		// further: try to build logging outlets
+		outlets, err := logging.OutletsFromConfig(*subcommand.Config().Global.Logging)
+		if err != nil {
+			err := errors.Wrap(err, "cannot build logging from config")
+			if configcheckArgs.what == "logging" {
+				return err
+			} else {
+				fmt.Fprintf(os.Stderr, "%s\n", err)
+				outlets = nil
+				hadErr = true
+			}
+		}
+
+
 		whatMap := map[string]func() {
 			"all": func() {
 				o := struct {
 					config *config.Config
 					jobs []job.Job
+					logging *logger.Outlets
 				}{
 					subcommand.Config(),
 					confJobs,
+					outlets,
 				}
 				formatter(o)
 			},
@@ -73,6 +91,9 @@ var ConfigcheckCmd = &cli.Subcommand{
 			"jobs": func() {
 				formatter(confJobs)
 			},
+			"logging": func() {
+				formatter(outlets)
+			},
 		}
 
 		wf, ok := whatMap[configcheckArgs.what]