Giter Club home page Giter Club logo

logger's Introduction

Logger

gol4ng/logger: Golang logger

Go Report Card Maintainability Test Coverage Build Status GoDoc

Gol4ng/Logger is another GO logger. The main line is to provide a friendly and fast API to send your log whenever you want.

Why another one?

When i start GO i searched a logger that can be simple to use, efficient, multi output, multi formats and quite easy to extend. That's why i created this logger with built-in handlers(process a log), formatters(format log in another representation), middlewares(log modification before handler)

Installation

go get -u github.com/gol4ng/logger

Quick Start

package main

import (
	"os"
	"runtime"
	
	"github.com/gol4ng/logger"
	"github.com/gol4ng/logger/formatter"
	"github.com/gol4ng/logger/handler"
)

func main(){
	// logger will print on STDOUT with default line format
	l := logger.NewLogger(handler.Stream(os.Stdout, formatter.NewDefaultFormatter(formatter.WithContext(true))))
	
	l.Debug("Go debug information", logger.String("go_os", runtime.GOOS), logger.String("go_arch", runtime.GOARCH))
	// <debug> MyExample message {"go_arch":"amd64","go_os":"darwin"}
	
	l.Info("Another")
    //<info> Another
}

Logger interface

This library expose some quite simple interfaces.

Simplest one

type LogInterface interface {
	Log(message string, level Level, field ...Field)
}

The friendly one

type LoggerInterface interface {
	LogInterface
	Debug(message string, field ...Field)
	Info(message string, field ...Field)
	Notice(message string, field ...Field)
	Warning(message string, field ...Field)
	Error(message string, field ...Field)
	Critical(message string, field ...Field)
	Alert(message string, field ...Field)
	Emergency(message string, field ...Field)
}

Handlers

Handlers are log entry processor. It received a log entry and process it in order to send log to it's destination

Available handlers:

  • stream it will write formatted log in io.Writer
  • socket it will write formatted log in net.Conn
  • chan send all entry in provided go channel
  • gelf format to gelf and send to gelf server (TCP or UDP gzipped chunk)
  • group it will send log to all provided child handlers
  • rotate it will write formatted log in file and rotate file (mode: interval/archive)
  • syslog send formatted log in syslog server

Formatters

The formatter convert log entry to a string representation (text, json, gelf...) They are often inject in handler to do the conversion process

Available formatters:

  • default <info> My log message {"my_key":"my_value"}
  • line it's just a fmt.Sprintf facade format:%s %s %s will produce My log message info <my_key:my_value>
  • gelf format log entry to gelf {"version":"1.1","host":"my_fake_hostname","level":6,"timestamp":513216000.000,"short_message":"My log message","full_message":"<info> My log message [ <my key:my_value> ]","_my_key":"my_value"}
  • json format log entry to json {"Message":"My log message","Level":6,"Context":{"my_key":"my_value"}}

Middlewares

The middleware are handler decorator/wrapper. It will allow you to do some process around child handler

Available middleware:

  • caller it will add caller file/line to context <file:/my/example/path/file> <line:31>
  • context it permit to have a default context value useful when you want to set global context value
  • error it will print provided handler error (can be configure to silent it)
  • filter it will permit to filter log entry level filter are available or you can use your own callback filter
  • placeholder it will replace log message placeholder with contextual value
  • recover it will convert handler panic to error
  • timestamp it will add timestamp to log context

Writers

Writers are use by handler to write/send log to appropriate destination

Available writer:

  • compress it will compress log to gzip/zlib
  • gelf_chunked it will chunked log entry into gelf chunk
  • rotate it will write in io.Writer and rotate writer on demand
  • time_rotate it's a rotate writer that rotate with time.Ticker

Todo

  • benchmark

  • Implement all the handler

    • SSE http endpoint
    • websocket server
    • socket server
    • https://craig.is/writing/chrome-logger
    • fingercross
    • grpc / protobuf
    • curl
    • Mail
    • Slack
    • hipchat
    • amqp
    • redis
    • elasticsearch
    • newrelic
    • browser console
    • couchdb
    • cube
    • ifttt
    • InsightOps
    • mandrill
    • pushover
    • raven
    • rollbar
    • sampling
    • LogEntries
    • ???
  • Implement all the formatter

    • html
    • proto
    • slack
    • flowdoc
    • fluentd
    • logstash
    • mongodb
    • wildfire

Idea

  • log server with log routing

logger's People

Contributors

instabledesign avatar qneyrat avatar rmasclef avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

fossabot eko ekmixon

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.