GithubHelp home page GithubHelp logo

k32 / hut Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tolbrino/hut

0.0 1.0 0.0 109 KB

helper library for making Erlang libraries logging framework agnostic

Makefile 12.74% Erlang 87.26%

hut's Introduction

Travis Hex.pm Version Hex.pm License Build Tool

Overview

hut is a minimal library for Erlang libraries and small applications to stay agnostic to the logging framework in use. Its purpose is to allow the developers of umbrella applications to use their logging framework of choice and ensure that dependency stick to that choice as well.

Origin

The idea for hut came out of a discussion about exometer_core's logging facilities.

Usage

  1. Include hut as a dependency in your toolchain.
  2. Include hut in your .erl files via -include_lib(hut/include/hut.hrl)
  3. Log with
  • ?log(Level, Msg) to log the given message
  • ?log(Level, Fmt, Args) to format the given message with the arguments using io_lib:format/2
  • ?log(Level, Fmt, Args, Opts) to pass additional options to the logging backend in use
  • ?slog(Level, #{key1 => Value1, ...}) structured log message
  • ?slog(Level, Data :: map(), Metadata :: map()) structured log message with custom metadata
  • ?set_process_metadata(Metadata :: map()) add custom metadata to the process
  1. Compile and pass the appropriate macro to the compiler to enable a certain backend as described next.
  2. Ensure that the application hut is started as part of your system.

Supported Logging Backends

  • SASL error_logger as the default (on OTP20 and older)
  • logger as the default on OTP21+
  • io:format/2 via -DHUT_IOFORMAT
  • no-op logging via -DHUT_NOOP
  • Lager via -DHUT_LAGER (you may optionally specify a different log message sink by additionally defining -DHUT_LAGER_SINK mysinkname; the default message sink is lager)
  • custom callback module via -DHUT_CUSTOM -DHUT_CUSTOM_CB mycbmod (the module must provide the function log(Level, Fmt, Args, Opts)

Log Level Gates

hut provides a simple mechanisms to drop log messages depending on the enabled log level. The functionality is similar to how Lager works with log levels.

The current log level (default is info) can be set through the application variable level:

erl -hut level debug

All log messages with levels below the current log level will be dropped.

The gating mechanism can be disabled through the application variable use_log_level_gate:

erl -hut use_log_level_gate false

NOTE: The gating mechanism is not supported for the Lager backend, since Lager itself provides a similar functionality which you should rely on when using Lager.

Examples

Refer to the respective Makefile in each example for details.

  • examples/basic shows the use of all backends from an Erlang library
  • examples/elixir shows how to use a hut-enabled Erlang library within an Elixir application
  • examples/rebar3 shows how to use hut in a rebar3 project

hut's People

Contributors

jadeallenx avatar k32 avatar mmmries avatar okeuday avatar tolbrino avatar

Watchers

 avatar

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.