New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

github.com/neirpyc/slog-gorm

Package Overview
Dependencies
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/neirpyc/slog-gorm

Source
Go Modules
Version
v0.0.0-20230916071148-0aa7b644e047
Version published
Created
Source

slog-gorm

slog-gorm provides a slog adapter, highly configurable, for gorm logger to have homogeneous logs between your application / script and gorm.

Key features

  • compatible with any slog.Handler, which allows you to keep control on the format of your logs.
  • can define a threshold to identify and log the slow queries.
  • can log all SQL messages or just the errors if you prefer.
  • can define a custom slog.Level for errors, slow queries or the other logs.

Requirement

  • golang >= 1.21

Usage

import (
    "log/slog"
    "os"

    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
	
    slogGorm "github.com/orandin/slog-gorm"
)

// Create an slog-gorm instance
gormLogger := slogGorm.New() // use slog.Default() by default


// GORM: Globally mode
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
    Logger: gormLogger,
})

// GORM: Continuous session mode
tx := db.Session(&Session{Logger: gormLogger})
tx.First(&user)
tx.Model(&user).Update("Age", 18)

With your slog.Logger

The following example shows you how to use a specific slog.Logger with slog-gorm:

// With your slog.Logger
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))

// Also, you can set specific attributes to distinguish between your application logs and gorm logs
// logger = logger.With(slog.String("log_type", "database"))

gormLogger := slogGorm.New(
    slogGorm.WithLogger(logger), // Optional, use slog.Default() by default
    slogGorm.WithTraceAll(slog.Info), // trace all messages and define the default logging level
)

Use your custom slog.Level

As some loggers (e.g. syslog) have their own logging levels, slog-gorm lets you use them to ensure the consistency of your logs and make them easier to understand.

You can set the logging level for these log types:

TypeDescriptionDefault
slogGorm.ErrorLogTypeFor SQL errorsslog.LevelError
slogGorm.SlowQueryLogTypeFor slow queriesslog.LevelWarn
slogGorm.DefaultLogTypeFor other messages (default level)slog.LevelInfo

Example:

const (
    LOG_EMERG   = slog.Level(0)
    // ...
    LOG_ERR     = slog.Level(3)
    LOG_WARNING = slog.Level(4)
    LOG_NOTICE  = slog.Level(5)
    // ...
    LOG_DEBUG   = slog.Level(7)
)

logger := slog.New(syslogHandler)

gormLogger := slogGorm.New(
    slogGorm.WithLogger(logger),

    // Set logging level for SQL errors	
    slogGorm.SetLogLevel(slogGorm.ErrorLogType, LOG_ERR)
	
    // Set logging level for slow queries	
    slogGorm.SetLogLevel(slogGorm.SlowQueryLogType, LOG_NOTICE)

    // Set logging level for other messages (default level)
    slogGorm.SetLogLevel(slogGorm.DefaultLogType, LOG_DEBUG)
)

Other options

customLogger := sloggorm.New(
	sloggorm.WithSlowThreshold(500 * time.Millisecond), // to identify slow queries
	
	sloggorm.WithRecordNotFoundError(), // don't ignore not found errors
	
	sloggorm.WithSourceField("origin"), // instead of "file" (by default)
	slogGorm.WithErrorField("err"),     // instead of "error" (by default)
)

By default, the slow queries and SQL errors are logged, but you can ignore all SQL messages with WithIgnoreTrace().

customLogger := sloggorm.New(
    sloggorm.WithIgnoreTrace(), // disable the tracing of SQL queries by the logger.
)

FAQs

Package last updated on 16 Sep 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts