]> Cypherpunks.ru repositories - nncp.git/commitdiff
Log handler's stdout/stderr
authorSergey Matveev <stargrave@stargrave.org>
Sun, 10 Oct 2021 11:52:28 +0000 (14:52 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 10 Oct 2021 11:52:28 +0000 (14:52 +0300)
src/log.go
src/toss.go

index a2e72b238f61e1a570e194d91edca8c58263c80b..97a8a8fd793ef08d7777dd18813ad4022eb730bd 100644 (file)
@@ -42,32 +42,45 @@ type LE struct {
 type LEs []LE
 
 func (les LEs) Rec() string {
-       fields := make([]recfile.Field, 0, len(les)+1)
-       fields = append(fields, recfile.Field{
-               Name: "When", Value: time.Now().UTC().Format(time.RFC3339Nano),
-       })
-       var val string
-       for _, le := range les {
-               switch v := le.V.(type) {
-               case int, int8, uint8, int64, uint64:
-                       val = fmt.Sprintf("%d", v)
-               case bool:
-                       val = fmt.Sprintf("%v", v)
-               default:
-                       val = fmt.Sprintf("%s", v)
-               }
-               fields = append(fields, recfile.Field{Name: le.K, Value: val})
-       }
        b := bytes.NewBuffer(make([]byte, 0, 1<<10))
        w := recfile.NewWriter(b)
        _, err := w.RecordStart()
        if err != nil {
                panic(err)
        }
-       _, err = w.WriteFields(fields...)
+       _, err = w.WriteFields(recfile.Field{
+               Name:  "When",
+               Value: time.Now().UTC().Format(time.RFC3339Nano),
+       })
        if err != nil {
                panic(err)
        }
+       for _, le := range les {
+               switch v := le.V.(type) {
+               case int, int8, uint8, int64, uint64:
+                       _, err = w.WriteFields(recfile.Field{
+                               Name:  le.K,
+                               Value: fmt.Sprintf("%d", v),
+                       })
+               case bool:
+                       _, err = w.WriteFields(recfile.Field{
+                               Name:  le.K,
+                               Value: fmt.Sprintf("%v", v),
+                       })
+               case []string:
+                       if len(v) > 0 {
+                               _, err = w.WriteFieldMultiline(le.K, v)
+                       }
+               default:
+                       _, err = w.WriteFields(recfile.Field{
+                               Name:  le.K,
+                               Value: fmt.Sprintf("%s", v),
+                       })
+               }
+               if err != nil {
+                       panic(err)
+               }
+       }
        return b.String()
 }
 
index 4037831b59618319fdee6083127d91b83af21622..84890343a86b67777d672a4d7a6571b2be1a0577 100644 (file)
@@ -157,9 +157,12 @@ func jobProcess(
                        } else {
                                cmd.Stdin = pipeR
                        }
-                       output, err := cmd.Output()
+                       output, err := cmd.CombinedOutput()
                        if err != nil {
-                               ctx.LogE("rx-hande", les, err, func(les LEs) string {
+                               les = append(les, LE{"Output", strings.Split(
+                                       strings.Trim(string(output), "\n"), "\n"),
+                               })
+                               ctx.LogE("rx-handle", les, err, func(les LEs) string {
                                        return fmt.Sprintf(
                                                "Tossing exec %s/%s (%s): %s: handling",
                                                sender.Name, pktName,