Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/freeformz/logglier
https://github.com/freeformz/logglier
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/freeformz/logglier
- Owner: freeformz
- License: mit
- Archived: true
- Created: 2011-02-26T08:03:16.000Z (almost 14 years ago)
- Default Branch: master
- Last Pushed: 2019-06-18T01:27:21.000Z (over 5 years ago)
- Last Synced: 2024-11-17T14:50:05.535Z (about 2 months ago)
- Language: Ruby
- Homepage:
- Size: 102 KB
- Stars: 57
- Watchers: 4
- Forks: 25
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
NOTE
--------If you are interested in taking ownership of this please reach out to me.
Overview
--------
[![Build Status](https://travis-ci.org/freeformz/logglier.png)](https://travis-ci.org/freeformz/logglier)Send logged messages to Loggly using either the HTTP API or Syslog/UDP. Check out Loggly's [Ruby logging documentation](https://www.loggly.com/docs/ruby-logs/) to learn more.
Can be used in place of Ruby's Logger
()In fact, it (currently) returns an instance of Logger.
Usage
-----require 'logglier'
log = Logglier.new()
log.info("hello from logglier")
### With Rails
config/environments/production.rb
RailsApplication::Application.configure do
config.logger = Logglier.new()
end### With Rails 4
config/initializers/loggly.rb
loggly = Logglier.new('https://logs-01.loggly.com/inputs/[your-customer-token]/tag/rails', threaded: true, format: :json)
Rails.logger.extend(ActiveSupport::Logger.broadcast(loggly))^ Submitted by: https://github.com/cap10morgan
Input URLs
-------### HTTP Inputs
Logglier.new('https://logs-01.loggly.com/inputs/[your-customer-token]')The id is provided by loggly, look at the input's details page To make
sure the http client doesn't block too long read_timeout and
open_timeout are set to 2 seconds by default. This can be overridden
like so:Logglier.new('https://logs-01.loggly.com/inputs/[your-customer-token]',
:read_timeout => <#>,
:open_timeout => <#> )#### Threaded Delivery
Creating a new Logglier instance, pointed at a http input, with the
`:threaded => true` option will tell Logglier to deliver log messages
for that logger in a separate thread. Each new Logglier instance gets
it's own delivery thread and those threads are joined at exit to ensure
log message delivery.Example:
Logglier.new('https://logs-01.loggly.com/inputs/[your-customer-token]',
:threaded => true)#### JSON Formatting
add the ':format => :json' when creating a new Logglier instance. Make
sure to use a HTTP input that has JSON enabled. Can also be used with
threaded delivery.Example:
Logglier.new('https://logs-01.loggly.com/inputs/[your-customer-token]',
:format => :json)Logglier uses [MultiJson](https://github.com/intridea/multi_json) to delegate the choice of JSON libraries to you, but I recommend using
[Yajl](https://github.com/brianmario/yajl-ruby), just require the json gem of your choice before logglier.### Syslog TCP/UDP Inputs
Logglier.new('[udp|tcp]://:/')
The facility is optional and defaults to 16 (local0) if none is
specified. Facilities are just integers from 0 to 23, seeLogging
-------Logglier.new returns a ruby Logger object, so take a look at:
http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/
The Logger's logdev has some special format handling though.
### Logging a string
log.warn "test"
Will produce the following log message in Loggly:
" severity=WARN, test"
### Logging a Hash
log.warn :boom => :box, :bar => :soap
Will produce the following log message in Loggly:
" severity=WARN, boom=box, bar=soap"
### Logging Fast
If speed is a concern, then you should pick a fast transport protocol. Here is their speed ranking from fastest to slowest:
- Syslog UDP
- Syslog TCP
- Threaded HTTP
- Threaded HTTPS
- Blocking HTTP
- Blocking HTTPS
Syslog is the fastest because it's the most efficient protocol and the syslog daemon runs asynchronously with it's own queuing system (and optionally TLS encryption).UDP uses a simple connectionless transmission model with a minimum of protocol mechanism. There is no guarantee of delivery, ordering, or duplicate protection.
Threaded won't block your app but it can use up more memory and stack space. Blocking is the slowest because your app will wait for the data to be received by Loggly.
HTTPS is slower than HTTP because it requires an extra round trip to setup the secure connection.
### Logging to an alternate log level (i.e.`INFO`)
To change the default log level on a `Logglier` instance, you can use the
`level=` along with Ruby's built in `Logger` constants:logger = Logglier.new(...)
logger.level = Logger::INFO[Read more about Ruby's built in Logging levels](https://ruby-doc.org/stdlib-2.1.1/libdoc/logger/rdoc/Logger.html#class-Logger-label-Description)
Bugs
-----https://github.com/freeformz/logglier/issues
Pull requests welcome
TODO
-----* Support ActiveSupport Notifications for newer rails
* Alternative https implementations (Typheous, Excon, etc). May be
faster?
* EM Integration?