headlamp icon indicating copy to clipboard operation
headlamp copied to clipboard

Format backend log to easily be parsed by log platform

Open lijianzhi01 opened this issue 1 year ago • 2 comments

Headlamp backend server log isn't easy to recognized by log platform. For example. azure app service will take all headlamp backend log as error level.

I have classified logger to refer:

package main

import (
	"fmt"
	"io"
	"log"
)

type Level int

const (
	LevelInfo Level = iota
	LevelWarning
	LevelError
)

type CustomLogger struct {
	logger *log.Logger
	level  Level
}

func (c *CustomLogger) init(out io.Writer, level Level) {
	c.logger = log.New(out, "", 0)
	c.level = level
}

func (c *CustomLogger) output(level Level, format string, v ...interface{}) {
	if level >= c.level {
		levelText := [...]string{"[INFO] ", "[WARNING] ", "[ERROR] "}
		message := fmt.Sprintf("%s%s", levelText[level], fmt.Sprintf(format, v...))
		c.logger.Printf("%s", message)
	}
}

func (c *CustomLogger) Info(format string, v ...interface{}) {
	c.output(LevelInfo, format, v...)
}

func (c *CustomLogger) Warning(format string, v ...interface{}) {
	c.output(LevelWarning, format, v...)
}

func (c *CustomLogger) Error(format string, v ...interface{}) {
	c.output(LevelError, format, v...)
}

var logger = CustomLogger{}

use logger:

func setupProxyForContext(context *Context, config *HeadlampConfig, source int) error {
	proxy, err := config.createProxyForContext(*context)
	if err != nil {
		logger.Info("Error setting up proxy for context %s: %s\n", context.Name, err)
		return err
	}

	_, isReplacement := config.contextProxies[context.Name]
	if isReplacement {
		logger.Info("Replaced cluster \"%s\" proxy by:\n", context.Name)
	} else {
		logger.Info("Created new cluster proxy:")
	}

	logger.Info("\tlocalhost:%d%s%s/{api...} -> %s\n", config.port, config.baseURL, "/clusters/"+context.Name,
		*context.cluster.getServer())

	config.contextProxies[context.Name] = contextProxy{
		context,
		proxy,
		source,
	}

	return nil
}

It will show up like: image

lijianzhi01 avatar Jan 08 '24 10:01 lijianzhi01

I find a related log level standards. https://learn.microsoft.com/en-us/azure/developer/java/sdk/logging-overview#default-logger-for-temporary-debugging

lijianzhi01 avatar Jan 15 '24 15:01 lijianzhi01

Working on this

knrt10 avatar Jan 30 '24 10:01 knrt10