Skip to content

Commit 4fd23c0

Browse files
committed
improve logging for containers
1 parent 86e448c commit 4fd23c0

File tree

3 files changed

+46
-19
lines changed

3 files changed

+46
-19
lines changed

cmd/manager/main.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"fmt"
7+
"io"
78
"log"
89
"net/http"
910
"os"
@@ -293,7 +294,7 @@ func (s *server) logsHandler(w http.ResponseWriter, r *http.Request) {
293294
}
294295

295296
// parse request
296-
var logs string
297+
var logs io.Reader
297298
name := r.URL.Query().Get("name")
298299

299300
if name == "" {
@@ -318,7 +319,13 @@ func (s *server) logsHandler(w http.ResponseWriter, r *http.Request) {
318319

319320
// return success
320321
w.WriteHeader(http.StatusOK)
321-
fmt.Fprint(w, logs)
322+
// w.Header().Set("Content-Type", "text/plain")
323+
_, err := io.Copy(w, logs)
324+
if err != nil {
325+
w.WriteHeader(http.StatusInternalServerError)
326+
log.Println(err)
327+
return
328+
}
322329
}
323330

324331
func (s *server) urlUploadHandler(w http.ResponseWriter, r *http.Request) {

pkg/docker/handler.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package docker
22

33
import (
44
"bufio"
5+
"bytes"
56
"context"
67
"fmt"
78
"io"
@@ -18,6 +19,7 @@ import (
1819
"github.com/docker/docker/api/types/container"
1920
"github.com/docker/docker/client"
2021
"github.com/docker/docker/pkg/archive"
22+
"github.com/docker/docker/pkg/stdcopy"
2123
"github.com/google/uuid"
2224
)
2325

@@ -359,33 +361,47 @@ func (dh *dockerHandler) Destroy() error {
359361
return nil
360362
}
361363

362-
func (dh *dockerHandler) Logs() (string, error) {
364+
func (dh *dockerHandler) Logs() (io.Reader, error) {
363365
// get container logs
364366
// docker logs <container>
365-
var logs string
367+
var logs bytes.Buffer
366368
for _, container := range dh.containers {
367369
l, err := dh.client.ContainerLogs(
368370
context.Background(),
369371
container,
370372
types.ContainerLogsOptions{
371373
ShowStdout: true,
372374
ShowStderr: true,
375+
Timestamps: true,
373376
},
374377
)
375378
if err != nil {
376-
return "", err
379+
return nil, err
377380
}
378381

379-
lstr, err := io.ReadAll(l)
382+
var lstdout bytes.Buffer
383+
var lstderr bytes.Buffer
384+
385+
_, err = stdcopy.StdCopy(&lstdout, &lstderr, l)
386+
380387
l.Close()
381388

382389
if err != nil {
383-
return "", err
390+
return nil, err
384391
}
385392

386-
logs += string(lstr)
387-
logs += "\n"
393+
// add a prefix to each line
394+
// function=<function> handler=<handler> <line>
395+
scanner := bufio.NewScanner(&lstdout)
396+
397+
for scanner.Scan() {
398+
logs.WriteString(fmt.Sprintf("function=%s handler=%s %s\n", dh.name, container, scanner.Text()))
399+
}
400+
401+
if err := scanner.Err(); err != nil {
402+
return nil, err
403+
}
388404
}
389405

390-
return logs, nil
406+
return &logs, nil
391407
}

pkg/manager/manager.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type Handler interface {
4040
IPs() []string
4141
Start() error
4242
Destroy() error
43-
Logs() (string, error)
43+
Logs() (io.Reader, error)
4444
}
4545

4646
func New(id string, rproxyListenAddress string, rproxyPort map[string]int, rproxyConfigPort int, tfBackend Backend) *ManagementService {
@@ -183,28 +183,32 @@ func (ms *ManagementService) createFunction(name string, env string, threads int
183183
return name, nil
184184
}
185185

186-
func (ms *ManagementService) Logs() (string, error) {
186+
func (ms *ManagementService) Logs() (io.Reader, error) {
187187

188-
var logs string
188+
var logs bytes.Buffer
189189

190190
for name := range ms.functionHandlers {
191191
l, err := ms.LogsFunction(name)
192192
if err != nil {
193-
return "", err
193+
return nil, err
194+
}
195+
196+
_, err = io.Copy(&logs, l)
197+
if err != nil {
198+
return nil, err
194199
}
195200

196-
logs += l
197-
logs += "\n"
201+
logs.WriteString("\n")
198202
}
199203

200-
return logs, nil
204+
return &logs, nil
201205
}
202206

203-
func (ms *ManagementService) LogsFunction(name string) (string, error) {
207+
func (ms *ManagementService) LogsFunction(name string) (io.Reader, error) {
204208

205209
fh, ok := ms.functionHandlers[name]
206210
if !ok {
207-
return "", fmt.Errorf("function %s not found", name)
211+
return nil, fmt.Errorf("function %s not found", name)
208212
}
209213

210214
return fh.Logs()

0 commit comments

Comments
 (0)