| 53 | } |
| 54 | |
| 55 | func (f *JSONLogFile) Write(l *userlog.UserLog, buf []byte) (int, error) { |
| 56 | w := f.writer |
| 57 | if w == nil { |
| 58 | return 0, errLogClosed |
| 59 | } |
| 60 | if f.capacity <= 0 { |
| 61 | return 0, errOverCapacity |
| 62 | } |
| 63 | tmp := bytes.NewBuffer(nil) |
| 64 | i, j := 0, 0 |
| 65 | for i < len(buf) { |
| 66 | j = bytes.Index(buf[i:], LineByte) |
| 67 | if j < 0 { |
| 68 | j = len(buf) |
| 69 | } else if j > 0 { |
| 70 | j = i + j |
| 71 | } else { |
| 72 | i++ |
| 73 | continue |
| 74 | } |
| 75 | l.Message = buf[i:j] |
| 76 | if err := l.MarshalJSONBuf(tmp); err != nil { |
| 77 | return 0, err |
| 78 | } |
| 79 | i = j + 1 |
| 80 | } |
| 81 | w.Write(tmp.Bytes()) |
| 82 | atomic.AddInt32(&f.capacity, int32(-i)) |
| 83 | return i, nil |
| 84 | } |
| 85 | |
| 86 | func (f *JSONLogFile) Close() error { |
| 87 | w := f.writer |