// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 package service import ( "bytes" "io" ) type LogPrefixer struct { io.Writer Prefix []byte did bool } func (lp *LogPrefixer) Write(p []byte) (int, error) { if len(p) == 0 { return 0, nil } var out []byte if !lp.did { out = append(out, lp.Prefix...) } lp.did = p[len(p)-1] != '\n' out = append(out, bytes.Replace(p[:len(p)-1], []byte("\n"), append([]byte("\n"), lp.Prefix...), -1)...) out = append(out, p[len(p)-1]) _, err := lp.Writer.Write(out) if err != nil { return 0, err } return len(p), nil }