mysqlhook

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 27, 2018 License: MIT Imports: 6 Imported by: 24

README

MySQL Hook for Logrus

A mysql-based logrus hook

Build Coverage ReportCard GoDoc License

Quick Start

Download and install
$ go get -u -v github.com/LyricTian/logrus-mysql-hook
Usage
import "github.com/LyricTian/logrus-mysql-hook"

// ...

mysqlHook := mysqlhook.New(
	mysqlhook.SetExec(mysqlhook.NewExec(db, "log")),
)

defer mysqlHook.Flush()

log := logrus.New()
log.AddHook(mysqlHook)
Examples
package main

import (
	"database/sql"
	"fmt"

	"github.com/LyricTian/logrus-mysql-hook"
	"github.com/Sirupsen/logrus"

	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer db.Close()

	tableName := "e_log"
	mysqlHook := mysqlhook.New(
		mysqlhook.SetExec(mysqlhook.NewExec(db, tableName)),
	)
	defer db.Exec(fmt.Sprintf("drop table %s", tableName))

	log := logrus.New()
	log.AddHook(mysqlHook)
	log.WithField("foo", "bar").Info("foo test")

	mysqlHook.Flush()

	var message string
	row := db.QueryRow(fmt.Sprintf("select message from %s", tableName))
	err = row.Scan(&message)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(message)

	// Output: foo test
}

MIT License

Copyright (c) 2018 Lyric

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Execer

type Execer interface {
	Exec(entry *logrus.Entry) error
}

Execer write the logrus entry to the database

func NewExec

func NewExec(db *sql.DB, tableName string) Execer

NewExec create an exec instance

type Hook

type Hook struct {
	// contains filtered or unexported fields
}

Hook to send logs to a mysql database

Example
db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/myapp_test?charset=utf8")
if err != nil {
	fmt.Println(err)
	return
}
defer db.Close()

tableName := "e_log"
mysqlHook := mysqlhook.New(
	mysqlhook.SetExec(mysqlhook.NewExec(db, tableName)),
)
defer db.Exec(fmt.Sprintf("drop table %s", tableName))

log := logrus.New()
log.AddHook(mysqlHook)
log.WithField("foo", "bar").Info("foo test")
mysqlHook.Flush()

var message string
row := db.QueryRow(fmt.Sprintf("select message from %s", tableName))
err = row.Scan(&message)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(message)
Output:

foo test

func New

func New(opt ...Option) *Hook

New creates a hook to be added to an instance of logger

func (*Hook) Fire

func (h *Hook) Fire(entry *logrus.Entry) error

Fire is called when a log event is fired

func (*Hook) Flush

func (h *Hook) Flush()

Flush waits for the log queue to be empty

func (*Hook) Levels

func (h *Hook) Levels() []logrus.Level

Levels returns the available logging levels

type Option

type Option func(*options)

Option a hook parameter options

func SetExec

func SetExec(exec Execer) Option

SetExec set the Execer interface

func SetExtra

func SetExtra(extra map[string]interface{}) Option

SetExtra set extended parameters

func SetFilter

func SetFilter(filter func(*logrus.Entry) *logrus.Entry) Option

SetFilter set the entry filter

func SetLevels

func SetLevels(levels ...logrus.Level) Option

SetLevels set the available log level

func SetMaxQueues

func SetMaxQueues(maxQueues int) Option

SetMaxQueues set the number of buffers

func SetMaxWorkers

func SetMaxWorkers(maxWorkers int) Option

SetMaxWorkers set the number of worker threads

func SetOut

func SetOut(out io.Writer) Option

SetOut set error output

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL