15954: Merge branch 'master'
[arvados.git] / lib / boot / log.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package boot
6
7 import (
8         "bytes"
9         "io"
10 )
11
12 type logPrefixer struct {
13         io.Writer
14         Prefix []byte
15         did    bool
16 }
17
18 func (lp *logPrefixer) Write(p []byte) (int, error) {
19         if len(p) == 0 {
20                 return 0, nil
21         }
22         if !lp.did {
23                 lp.Writer.Write(lp.Prefix)
24                 lp.did = p[len(p)-1] != '\n'
25         }
26         out := append(bytes.Replace(p[:len(p)-1], []byte("\n"), append([]byte("\n"), lp.Prefix...), -1), p[len(p)-1])
27         _, err := lp.Writer.Write(out)
28         if err != nil {
29                 return 0, err
30         }
31         return len(p), nil
32 }