Class: SemanticLogger::Appender::Http
- Defined in:
- lib/semantic_logger/appender/http.rb
Overview
Log to any HTTP(S) server that accepts log messages in JSON form
Features:
-
JSON Formatted messages.
-
Uses a persistent http connection, if the server supports it.
-
SSL encryption (https).
Example:
SemanticLogger.add_appender(
appender: :http,
url: 'http://localhost:8088/path'
)
Direct Known Subclasses
Instance Attribute Summary collapse
-
#application ⇒ Object
Returns the value of attribute application.
-
#compress ⇒ Object
Returns the value of attribute compress.
-
#header ⇒ Object
Returns the value of attribute header.
-
#host ⇒ Object
Returns the value of attribute host.
-
#http ⇒ Object
readonly
Returns the value of attribute http.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#server ⇒ Object
readonly
Returns the value of attribute server.
-
#ssl_options ⇒ Object
readonly
Returns the value of attribute ssl_options.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
-
#username ⇒ Object
Returns the value of attribute username.
Attributes inherited from Base
Attributes inherited from Base
Instance Method Summary collapse
-
#initialize(options, &block) ⇒ Http
constructor
Create HTTP(S) log appender.
-
#log(log) ⇒ Object
Forward log messages to HTTP Server.
-
#reopen ⇒ Object
Re-open after process fork.
Methods inherited from Base
colorized_formatter, #default_formatter, #flush, json_formatter, #level
Methods inherited from Base
default_level, default_level=, #fast_tag, #level, #level=, #measure, #payload, #pop_tags, #push_tags, #silence, #tagged, #tags, #with_payload
Constructor Details
#initialize(options, &block) ⇒ Http
Create HTTP(S) log appender
Parameters:
url: [String]
Valid URL to post to.
Example: http://example.com/some_path
To enable SSL include https in the URL.
Example: https://example.com/some_path
verify_mode will default: OpenSSL::SSL::VERIFY_PEER
application: [String]
Name of this application to appear in log .
Default: SemanticLogger.application
host: [String]
Name of this host to appear in log .
Default: SemanticLogger.host
username: [String]
User name for basic Authentication.
Default: nil ( do not use basic auth )
password: [String]
Password for basic Authentication.
compress: [true|false]
Whether to compress the JSON string with GZip.
Default: false
ssl: [Hash]
Specific SSL options: For more details see NET::HTTP.start
ca_file, ca_path, cert, cert_store, ciphers, key, open_timeout, read_timeout, ssl_timeout,
ssl_version, use_ssl, verify_callback, verify_depth and verify_mode.
level: [:trace | :debug | :info | :warn | :error | :fatal]
Override the log level for this appender.
Default: SemanticLogger.default_level
formatter: [Object|Proc]
An instance of a class that implements #call, or a Proc to be used to format
the output from this appender
Default: Use the built-in formatter (See: #call)
filter: [Regexp|Proc]
RegExp: Only include log where the class name matches the supplied.
regular expression. All other will be ignored.
Proc: Only include log where the supplied Proc returns true
The Proc must return true or false.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/semantic_logger/appender/http.rb', line 70 def initialize(, &block) = .dup @url = .delete(:url) = .delete(:ssl) @username = .delete(:username) @password = .delete(:password) @application = .delete(:application) || 'Semantic Logger' @host = .delete(:host) || SemanticLogger.host @compress = .delete(:compress) || false unless .has_key?(:formatter) [:formatter] = block || (respond_to?(:call) ? self : SemanticLogger::Formatters::Json.new) end raise(ArgumentError, 'Missing mandatory parameter :url') unless @url @header = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' } @header['Content-Encoding'] = 'gzip' if @compress uri = URI.parse(@url) ( ||= {})[:use_ssl] = true if uri.scheme == 'https' @server = uri.host raise(ArgumentError, "Invalid format for :url: #{@url.inspect}. Should be similar to: 'http://hostname:port/path'") unless @url @port = uri.port @username = uri.user if !@username && uri.user @password = uri.password if !@password && uri.password @path = uri.path reopen # Pass on the level and custom formatter if supplied super() end |
Instance Attribute Details
#application ⇒ Object
Returns the value of attribute application.
19 20 21 |
# File 'lib/semantic_logger/appender/http.rb', line 19 def application @application end |
#compress ⇒ Object
Returns the value of attribute compress.
19 20 21 |
# File 'lib/semantic_logger/appender/http.rb', line 19 def compress @compress end |
#header ⇒ Object
Returns the value of attribute header.
19 20 21 |
# File 'lib/semantic_logger/appender/http.rb', line 19 def header @header end |
#host ⇒ Object
Returns the value of attribute host.
19 20 21 |
# File 'lib/semantic_logger/appender/http.rb', line 19 def host @host end |
#http ⇒ Object (readonly)
Returns the value of attribute http.
20 21 22 |
# File 'lib/semantic_logger/appender/http.rb', line 20 def http @http end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
20 21 22 |
# File 'lib/semantic_logger/appender/http.rb', line 20 def path @path end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
20 21 22 |
# File 'lib/semantic_logger/appender/http.rb', line 20 def port @port end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
20 21 22 |
# File 'lib/semantic_logger/appender/http.rb', line 20 def server @server end |
#ssl_options ⇒ Object (readonly)
Returns the value of attribute ssl_options.
20 21 22 |
# File 'lib/semantic_logger/appender/http.rb', line 20 def end |
#url ⇒ Object (readonly)
Returns the value of attribute url.
20 21 22 |
# File 'lib/semantic_logger/appender/http.rb', line 20 def url @url end |
#username ⇒ Object
Returns the value of attribute username.
19 20 21 |
# File 'lib/semantic_logger/appender/http.rb', line 19 def username @username end |
Instance Method Details
#log(log) ⇒ Object
Forward log messages to HTTP Server
115 116 117 118 119 |
# File 'lib/semantic_logger/appender/http.rb', line 115 def log(log) return false if (level_index > (log.level_index || 0)) || !(log) # Filtered out? post(formatter.call(log, self)) end |
#reopen ⇒ Object
Re-open after process fork
109 110 111 112 |
# File 'lib/semantic_logger/appender/http.rb', line 109 def reopen # On Ruby v2.0 and greater, Net::HTTP.new uses a persistent connection if the server allows it @http = ? Net::HTTP.new(server, port, ) : Net::HTTP.new(server, port) end |