• Stars
    star
    812
  • Rank 53,869 (Top 2 %)
  • Language
    Ruby
  • License
    Apache License 2.0
  • Created over 11 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Semantic Logger is a feature rich logging framework, and replacement for existing Ruby & Rails loggers.

Semantic Logger

Gem Version Build Status Downloads License

Semantic Logger is a feature rich logging framework, and replacement for existing Ruby & Rails loggers.

Documentation

Semantic Logger Guide

Logging Destinations

Logging to the following destinations are all supported "out-of-the-box":

  • File
  • Screen
  • ElasticSearch. (Use with Kibana for Dashboards and Visualizations)
  • Graylog
  • BugSnag
  • NewRelic
  • Splunk
  • MongoDB
  • Honeybadger
  • Sentry (both with legacy sentry-raven and modern sentry-ruby gem)
  • HTTP
  • TCP
  • UDP
  • Syslog
  • Add any existing Ruby logger as another destination.
  • Roll-your-own

Semantic Logger is capable of logging thousands of lines per second without slowing down the application. Traditional logging systems make the application wait while the log information is being saved. Semantic Logger avoids this slowdown by pushing log events to an in-memory queue that is serviced by a separate thread that only handles saving log information to multiple destinations / appenders.

Rails

When running Rails, use rails_semantic_logger instead of Semantic Logger directly since it will automatically replace the Rails default logger with Semantic Logger.

Rocket Job

Checkout the sister project Rocket Job: Ruby's missing batch system.

Fully supports Semantic Logger when running jobs in the background. Complete support for job metrics sent via Semantic Logger to your favorite dashboards.

Optional Dependencies

The following gems are only required when their corresponding appenders are being used, and are therefore not automatically included by this gem:

  • Bugsnag Appender: gem 'bugsnag'
  • MongoDB Appender: gem 'mongo' 1.9.2 or above
  • NewRelic Appender: gem 'newrelic_rpm'
  • NewRelicLogs Appender: gem 'newrelic_rpm'
  • Syslog Appender: gem 'syslog_protocol' 0.9.2 or above
  • Syslog Appender to a remote syslogng server over TCP or UDP: gem 'net_tcp_client'
  • Splunk Appender: gem 'splunk-sdk-ruby'
  • Elasticsearch Appender: gem 'elasticsearch'
  • Kafka Appender: gem 'ruby-kafka'
  • Legacy Sentry Appender: gem 'sentry-raven' (deprecated)
  • Sentry Appender: gem 'sentry-ruby'

Upgrading to Semantic Logger v4.9

These changes should not be noticeable by the majority of users of Semantic Logger, since they are to the internal API. It is possible that advanced users may be using these internal API's directly.

This does not affect any calls to the public api SemanticLogger.add_appender.

File and IO are now separate appenders. When creating the File appender explicitly, its arguments have changed. For example, when requesting an IO stream, it needs to be changed from:

SemanticLogger::Appender::File.new(io: $stderr)

to:

SemanticLogger::Appender::IO.new($stderr)

Additionally, this needs to be changed from:

SemanticLogger::Appender::File.new(file_name: "file.log")

to:

SemanticLogger::Appender::File.new("file.log")

Rails Semantic Logger, if used, needs to be upgraded to v4.9 when upgrading to Semantic Logger v4.9.

Upgrading to Semantic Logger v4.4

With some forking frameworks it is necessary to call reopen after the fork. With v4.4 the workaround for Ruby 2.5 crashes is no longer needed. I.e. Please remove the following line if being called anywhere:

SemanticLogger::Processor.instance.instance_variable_set(:@queue, Queue.new)

Upgrading to Semantic Logger v4.0

The following changes need to be made when upgrading to V4:

  • Ruby V2.3 / JRuby V9.1 is now the minimum runtime version.
  • Replace calls to Logger#with_payload with SemanticLogger.named_tagged.
  • Replace calls to Logger#payload with SemanticLogger.named_tags.
  • MongoDB Appender requires Mongo Ruby Client V2 or greater.
  • Appenders now write payload data in a seperate :payload tag instead of mixing them directly into the root elements to avoid name clashes.

As a result any calls like the following:

logger.debug foo: 'foo', bar: 'bar'

Must be replaced with the following in v4:

logger.debug payload: {foo: 'foo', bar: 'bar'}

Similarly, for measure blocks:

logger.measure_info('How long is the sleep', foo: 'foo', bar: 'bar') { sleep 1 } 

Must be replaced with the following in v4:

logger.measure_info('How long is the sleep', payload: {foo: 'foo', bar: 'bar'}) { sleep 1 } 

The common log call has not changed, and the payload is still logged directly:

logger.debug('log this', foo: 'foo', bar: 'bar')

Install

gem install semantic_logger

To configure a stand-alone application for Semantic Logger:

require 'semantic_logger'

# Set the global default log level
SemanticLogger.default_level = :trace

# Log to a file, and use the colorized formatter
SemanticLogger.add_appender(file_name: 'development.log', formatter: :color)

If running rails, see: Semantic Logger Rails

Author

Reid Morrison

Contributors

Versioning

This project uses Semantic Versioning.

More Repositories

1

symmetric-encryption

Symmetric Encryption for Ruby Projects using OpenSSL
Ruby
473
star
2

rocketjob

Ruby's missing background and batch processing system
Ruby
289
star
3

rails_semantic_logger

Rails Semantic Logger replaces the Rails default logger with Semantic Logger
Ruby
262
star
4

iostreams

IOStreams is an incredibly powerful streaming library that makes changes to file formats, compression, encryption, or storage mechanism transparent to the application.
Ruby
93
star
5

net_tcp_client

Net::TCPClient is a TCP Socket Client with automated failover, load balancing, retries and built-in timeouts.
Ruby
48
star
6

jruby-jms

Complete JRuby API into Java Messaging Specification (JMS)
Ruby
47
star
7

rubywmq

Ruby interface into WebSphere MQ
C
33
star
8

parallel_minion

Pragmatic approach to parallel and asynchronous processing in Ruby
Ruby
23
star
9

secret_config

Centralized Configuration and Secrets Management for Ruby and Rails applications.
Ruby
14
star
10

sync_attr

Thread-safe Ruby class and instance attributes
Ruby
13
star
11

jruby-hornetq

JRuby interface into HornetQ
Ruby
12
star
12

rocketjob_mission_control

Web based management interface for Rocket Job
HTML
10
star
13

data_cleansing

Cleanse data received via Rails, APIs, files, or inside plain ruby objects.
Ruby
9
star
14

mongo_ha

High availability for the mongo ruby driver. Automatic reconnects and recovery when replica-set changes, etc.
Ruby
7
star
15

symmetric_encryption.ex

Symmetric Encryption for Elixir
Elixir
6
star
16

us_address_service

US Postal Address Service to verify and cleanse addresses, using data supplied by Melissa Data.
Elixir
4
star
17

opinionated_http

HTTP Client with retries. Uses PersistentHTTP for http connection pooling, Semantic Logger for logging and metrics, and uses Secret Config for its configuration.
Ruby
2
star
18

us_address_client

US Address Client that calls the privately hosted US Address Service that relies on Melissa Data Address Object
Ruby
1
star