Go Integration

Integrate error tracking into your Go applications

Error Logger Package

1. Create Error Logger

// errorlogger/errorlogger.go
package errorlogger

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
    "os"
    "runtime/debug"
)

type ErrorPayload struct {
    Message    string `json:"message"`
    StackTrace string `json:"stackTrace"`
}

var (
    apiKey      = os.Getenv("ERROR_LOG_API_KEY")
    securityKey = os.Getenv("ERROR_LOG_SECURITY_KEY")
    webhookURL  = fmt.Sprintf("https://your-domain.com/api/ingest/%s", apiKey)
)

func LogError(err error) {
    if err == nil {
        return
    }

    payload := ErrorPayload{
        Message:    err.Error(),
        StackTrace: string(debug.Stack()),
    }

    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("POST", webhookURL, bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-Security-Key", securityKey)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        // Silently fail
        return
    }
    defer resp.Body.Close()
}

HTTP Server Integration

Middleware for Standard HTTP

package main

import (
    "log"
    "net/http"
    "your-project/errorlogger"
)

func errorMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if err := recover(); err != nil {
                errorlogger.LogError(fmt.Errorf("%v", err))
                http.Error(w, "Internal Server Error", 500)
            }
        }()
        next.ServeHTTP(w, r)
    })
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", homeHandler)
    
    // Wrap with error middleware
    handler := errorMiddleware(mux)
    
    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", handler))
}

Gin Framework

package main

import (
    "github.com/gin-gonic/gin"
    "your-project/errorlogger"
)

func ErrorHandler() gin.HandlerFunc {
    return func(c *gin.Context) {
        defer func() {
            if err := recover(); err != nil {
                errorlogger.LogError(fmt.Errorf("%v", err))
                c.JSON(500, gin.H{"error": "Internal server error"})
            }
        }()
        c.Next()
    }
}

func main() {
    r := gin.Default()
    
    // Add error handler middleware
    r.Use(ErrorHandler())
    
    r.GET("/users/:id", func(c *gin.Context) {
        // Your handler code
    })
    
    r.Run(":8080")
}

Manual Error Logging

package main

import (
    "database/sql"
    "your-project/errorlogger"
)

func GetUser(id string) (*User, error) {
    user := &User{}
    err := db.QueryRow("SELECT * FROM users WHERE id = ?", id).Scan(user)
    
    if err != nil {
        // Log error to ErrorLogDashboard
        errorlogger.LogError(err)
        return nil, err
    }
    
    return user, nil
}

Environment Variables: Set ERROR_LOG_API_KEY and ERROR_LOG_SECURITY_KEY in your environment or .env file.