Write transforms the JSON input with formatters and appends to w.Out.
(p []byte)
| 120 | |
| 121 | // Write transforms the JSON input with formatters and appends to w.Out. |
| 122 | func (w ConsoleWriter) Write(p []byte) (n int, err error) { |
| 123 | // Fix color on Windows |
| 124 | if w.Out == os.Stdout || w.Out == os.Stderr { |
| 125 | w.Out = colorable.NewColorable(w.Out.(*os.File)) |
| 126 | } |
| 127 | |
| 128 | if w.PartsOrder == nil { |
| 129 | w.PartsOrder = consoleDefaultPartsOrder() |
| 130 | } |
| 131 | |
| 132 | var buf = consoleBufPool.Get().(*bytes.Buffer) |
| 133 | defer func() { |
| 134 | buf.Reset() |
| 135 | consoleBufPool.Put(buf) |
| 136 | }() |
| 137 | |
| 138 | var evt map[string]interface{} |
| 139 | p = decodeIfBinaryToBytes(p) |
| 140 | d := json.NewDecoder(bytes.NewReader(p)) |
| 141 | d.UseNumber() |
| 142 | err = d.Decode(&evt) |
| 143 | if err != nil { |
| 144 | return n, fmt.Errorf("cannot decode event: %s", err) |
| 145 | } |
| 146 | |
| 147 | if w.FormatPrepare != nil { |
| 148 | err = w.FormatPrepare(evt) |
| 149 | if err != nil { |
| 150 | return n, err |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | for _, p := range w.PartsOrder { |
| 155 | w.writePart(buf, evt, p) |
| 156 | } |
| 157 | |
| 158 | w.writeFields(evt, buf) |
| 159 | |
| 160 | if w.FormatExtra != nil { |
| 161 | err = w.FormatExtra(evt, buf) |
| 162 | if err != nil { |
| 163 | return n, err |
| 164 | } |
| 165 | } |
| 166 | |
| 167 | err = buf.WriteByte('\n') |
| 168 | if err != nil { |
| 169 | return n, err |
| 170 | } |
| 171 | |
| 172 | _, err = buf.WriteTo(w.Out) |
| 173 | return len(p), err |
| 174 | } |
| 175 | |
| 176 | // Call the underlying writer's Close method if it is an io.Closer. Otherwise |
| 177 | // does nothing. |