mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 01:05:00 +00:00 
			
		
		
		
	Adds a logging daemon that collects logs in a ring buffer in a runc container. The tools logwrite and logread can be used to read/write logs. The logging daemon can be sent open file descriptors that will be read and included in the logs. Modifies init to start the daemon and use logwrite to capture logs from runc. Signed-off-by: Magnus Skjegstad <magnus@skjegstad.com>
		
			
				
	
	
		
			53 lines
		
	
	
		
			876 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			876 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"bufio"
 | |
| 	"flag"
 | |
| 	"net"
 | |
| 	"os"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	logDump byte = iota
 | |
| 	logFollow
 | |
| 	logDumpFollow
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	var err error
 | |
| 
 | |
| 	var socketPath string
 | |
| 	var follow bool
 | |
| 	var dumpFollow bool
 | |
| 
 | |
| 	flag.StringVar(&socketPath, "socket", "/tmp/memlogdq.sock", "memlogd log query socket")
 | |
| 	flag.BoolVar(&dumpFollow, "F", false, "dump log, then follow")
 | |
| 	flag.BoolVar(&follow, "f", false, "follow log buffer")
 | |
| 	flag.Parse()
 | |
| 
 | |
| 	addr := net.UnixAddr{socketPath, "unix"}
 | |
| 	conn, err := net.DialUnix("unix", nil, &addr)
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	defer conn.Close()
 | |
| 
 | |
| 	var n int
 | |
| 	switch {
 | |
| 	case dumpFollow:
 | |
| 		n, err = conn.Write([]byte{logDumpFollow})
 | |
| 	case follow && !dumpFollow:
 | |
| 		n, err = conn.Write([]byte{logFollow})
 | |
| 	default:
 | |
| 		n, err = conn.Write([]byte{logDump})
 | |
| 	}
 | |
| 
 | |
| 	if err != nil || n < 1 {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	r := bufio.NewReader(conn)
 | |
| 	r.WriteTo(os.Stdout)
 | |
| 
 | |
| }
 |