| 80 | } |
| 81 | |
| 82 | func (pw *prefixWriter) writeLine(line string) error { |
| 83 | if line == "" { |
| 84 | return nil |
| 85 | } |
| 86 | if !strings.HasSuffix(line, "\n") { |
| 87 | line += "\n" |
| 88 | } |
| 89 | |
| 90 | defer pw.prefixed.mutex.Unlock() |
| 91 | pw.prefixed.mutex.Lock() |
| 92 | |
| 93 | idx, ok := pw.prefixed.seen[pw.prefix] |
| 94 | |
| 95 | if !ok { |
| 96 | idx = *pw.prefixed.counter |
| 97 | pw.prefixed.seen[pw.prefix] = idx |
| 98 | |
| 99 | *pw.prefixed.counter++ |
| 100 | } |
| 101 | |
| 102 | if _, err := fmt.Fprint(pw.writer, "["); err != nil { |
| 103 | return nil |
| 104 | } |
| 105 | |
| 106 | color := PrefixColorSequence[idx%uint(len(PrefixColorSequence))] |
| 107 | pw.prefixed.logger.FOutf(pw.writer, color, pw.prefix) |
| 108 | |
| 109 | if _, err := fmt.Fprint(pw.writer, "] "); err != nil { |
| 110 | return nil |
| 111 | } |
| 112 | |
| 113 | _, err := fmt.Fprint(pw.writer, line) |
| 114 | return err |
| 115 | } |