splog 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGQ5MTc5ZGUwMGJjNGE0NDBiZWViMWIzYmY3M2JkODZhNDMzMGJiOQ==
5
+ data.tar.gz: !binary |-
6
+ NmIxNDZjZDdjYTlkMDU3NmQ2YzQzOGRjYWExNjUyY2IzNDg2YWJhNw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NTk2OTlhOWU0ZTJlNzQxOTkxYTg4NTNmOWZiNTQyNzYyMzY5ODg1MzFjYjFl
10
+ YzVjMzVlMTE4YTM3N2M5ZGVmZDVkZTQ1YTRjNmYyNjRiZGMzYmYzMDZmMDlk
11
+ MjMxY2U5OTZlODZkN2VkZmZmYWI1MzY5ZWE4NDk2NDE0NjY0OGI=
12
+ data.tar.gz: !binary |-
13
+ ZDk3ZjQxZTA3YWZlOWZkYzc1OWEzNWVhZjAxMzc4Yjg4NzE2NGQ1MGZlNjQz
14
+ YWMzY2NhMGM0MjBmNzY0Y2M1MDMyZGI0ZGNlMjdhMjlhYTkzMmMyYWIxNjhh
15
+ ZDdmOGE3OWMzNDhiZjNjYTdjMzBkNjQxMjk5MTkwN2IyMTk1YTk=
data/.gitignore ADDED
@@ -0,0 +1,54 @@
1
+ # OS X
2
+ .DS_Store
3
+ .AppleDouble
4
+ .LSOverride
5
+ Icon
6
+
7
+
8
+ # Thumbnails
9
+ ._*
10
+ #
11
+ # # Files that might appear on external disk
12
+ .Spotlight-V100
13
+ .Trashes
14
+
15
+ # Jetbrains
16
+ .idea
17
+
18
+ *.gem
19
+ *.rbc
20
+ .bundle
21
+ .config
22
+ .yardoc
23
+ Gemfile.lock
24
+ InstalledFiles
25
+ _yardoc
26
+ coverage
27
+ doc/
28
+ lib/bundler/man
29
+ pkg
30
+ rdoc
31
+ spec/reports
32
+ test/tmp
33
+ test/version_tmp
34
+ tmp
35
+
36
+ ### Ruby ###
37
+ *.gem
38
+ *.rbc
39
+ .bundle
40
+ .config
41
+ coverage
42
+ InstalledFiles
43
+ lib/bundler/man
44
+ pkg
45
+ rdoc
46
+ spec/reports
47
+ test/tmp
48
+ test/version_tmp
49
+ tmp
50
+
51
+ # YARD artifacts
52
+ .yardoc
53
+ _yardoc
54
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in splog.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Samuel Mendenhall
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,150 @@
1
+ # Splog -- Simple Log Parsing
2
+
3
+ Splog allows you to define simple regular expressions in a yaml file that determine how to parse each line of any log file.
4
+
5
+ There are many similar solutions out in the wild but no solution that was simple and concise and could be configured to work with most any logfile. Most solutions are locked into a particular format, like Apache logs, or behind a paywall.
6
+
7
+ Splog solves this by allowing you to define regular expressions to split apart a line, any line, from any file, into a hash and even mapping the regular expression groups to various types like a DateTime or an Integer.
8
+
9
+ Splog also provides a feature that few other existing solutions do, and that is what I'll call fast forward parsing of a log. Let's say you have a Java app server log that has exceptions. Those exceptions should roll up into the originating log line. That can be easily configured by setting a match forward regular expression.
10
+
11
+ By default unmatched lines are rolled into the previously matche line. This also passively solves the issue of multiline log files which really should be one log entry with multiple lines.
12
+
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ gem 'splog'
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install splog
27
+
28
+ If you want to persist to mongo make sure you have mongo installed: http://www.mongodb.org/downloads
29
+
30
+ ## Usage
31
+
32
+ #### Getting started
33
+
34
+ * Install splog
35
+ * Create a ~/.splog.yml -- The quickest approach here is to copy from https://github.com/engineersamuel/splog/blob/master/examples/.splog.yml which has several patterns to get you started.
36
+ * Run splog on a log file! See the the Example section below.
37
+
38
+ #### Pretty printing json
39
+
40
+ There are many libraries out there to pretty print json. I happen to be partial to https://github.com/rafeca/prettyjson
41
+
42
+ #### Examples
43
+
44
+ If you want to test a pattern on a large log file just head that file and pipe it to splog
45
+
46
+ head -n 2 path_to/some_log | splog -p pattern_name -o json | prettyjson
47
+
48
+ Parsing an Apache access log to stdout by specifying the filename directly. The default output is stdout so no need to specify that directly
49
+
50
+ splog -p apache_common -f path_to/access_log
51
+
52
+ Same command with piping
53
+
54
+ cat path_to/apache_log | splog -p apache_common
55
+
56
+ And if you just want to test that the pattern is working with the log file and the log file is huge, head the results and pipe them
57
+
58
+ head -n 10 examples/access_log | splog -p apache_common
59
+
60
+ Of course it isn't so easy to tell from stdout if the logs were parsed, I recommend json for that. This will give you a clear visual that all logs were parsed as you expected them to be parsed
61
+
62
+ head -n 10 examples/access_log | splog -p apache_common -o json | prettyjson
63
+
64
+ Setting a custom key on each parsed line
65
+
66
+ head -n 10 examples/access_log | splog -p apache_common -o json -k server_1
67
+
68
+ Disabling the md5 on the hash
69
+
70
+ head -n 10 examples/access_log | splog -p apache_common -o json -k server_1 --no-md5
71
+
72
+ Persisting the log to mongo. Set -o with no arg so that no output to stdout. The -d mongo says look in yaml for a `db_refs` key of mongo and read the database infomration to persist to. Since the default is to hash the parsed log entry to `_id` then repeated executions of the command will result in no duplicated mongo entries.
73
+
74
+ head -n 2 examplese/access_log | splog -p apache_common -o -k server_1 -d mongo
75
+ monogo; use splog; db.logs.find().pretty()
76
+ {
77
+ "_id" : "e2304358eb62489fae8beb78d90a39a8",
78
+ "Host" : "127.0.0.103",
79
+ "Identity" : "-",
80
+ "User" : "-",
81
+ "Time" : ISODate("2013-10-03T16:31:00Z"),
82
+ "Request" : "STATUS / HTTP/1.0",
83
+ "Status" : 200,
84
+ "Size" : 86,
85
+ "Referer" : "-",
86
+ "UserAgent" : "ClusterListener/1.0",
87
+ "key" : "server1"
88
+ }
89
+ {
90
+ "_id" : "1507c52901c51ea2cc7ca687187c82e5",
91
+ "Host" : "127.0.0.224",
92
+ "Identity" : "-",
93
+ "User" : "-",
94
+ "Time" : ISODate("2013-10-03T16:31:03Z"),
95
+ "Request" : "STATUS / HTTP/1.0",
96
+ "Status" : 200,
97
+ "Size" : 86,
98
+ "Referer" : "-",
99
+ "UserAgent" : "ClusterListener/1.0",
100
+ "key" : "server1"
101
+ }
102
+
103
+
104
+
105
+ ## Contributing
106
+
107
+ 1. Fork it
108
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
109
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
110
+ 4. Push to the branch (`git push origin my-new-feature`)
111
+ 5. Create new Pull Request
112
+
113
+ ## Building Splog in Development
114
+
115
+ `rake build`
116
+ `rake release`
117
+
118
+ #### Examples of executing the bin/splog in development
119
+
120
+ ruby -Ilib ./bin/splog
121
+ ruby -Ilib ./bin/splog -p apache_common -f test/examples/apache/simple_access_log -o json
122
+ ruby -Ilib ./bin/splog -p apache_common -f test/examples/apache/simple_access_log -o json | prettyjson
123
+ ruby -Ilib ./bin/splog -p jboss_log4j_common -f test/examples/jboss/multiline_match_server.log -c test/examples/jboss/.splog.yml -o json | prettyjson
124
+
125
+ #### Executing the spec tests in dev
126
+
127
+ bundle exec rspec test
128
+
129
+ #### A few performance measurements
130
+
131
+ Note that everything is done in a streaming manner with Ruby Enumerators. No file is ever read completely. At most a file is read two lines at a time. The memory requirements should be minimal due to this.
132
+
133
+ Parsing a 1m JBoss log to json:
134
+
135
+ time ruby -Ilib ./bin/splog -p jboss_log4j_common -f ./server.log -o json
136
+ 2.99s user 0.04s system 88% cpu 3.437 total
137
+
138
+ Parsing a 1m JBoss log to with no writing to stdout:
139
+
140
+ time ruby -Ilib ./bin/splog -p jboss_log4j_common -f ./server.log -o
141
+ 2.81s user 0.02s system 99% cpu 2.834 total
142
+
143
+ Parsing a 45m Apache access log:
144
+
145
+ time ruby -Ilib ./bin/splog -p apache_common -f ./access_log -o
146
+ 44.49s user 0.10s system 99% cpu 44.596 total
147
+
148
+ ## Dependencies
149
+
150
+ Splog is compatible with Ruby 1.9+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/splog ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'splog'
4
+ parser = Splog::LogParser.new
5
+ parser.cli(ARGV)
@@ -0,0 +1,96 @@
1
+ db_refs:
2
+ mongo:
3
+ type: 'mongo'
4
+ host: "127.0.0.1"
5
+ port: "27017"
6
+ user: ""
7
+ pass: ""
8
+ db: "splog"
9
+ collection: "logs"
10
+
11
+ # Data Types supported ['DateTime' 'Integer', 'Float', 'String']
12
+ apache_common:
13
+ db_key:
14
+ delim: '_'
15
+ # Define an array to create the compound key to define this log file
16
+ # This is most useful when combined saving the log to mongo
17
+ # You can specify any command line option here to be dereferenced
18
+ # In this case if I passed in -k prod -f access_log the key would be
19
+ # "prod_access_log"
20
+ values:
21
+ - '--key'
22
+ - '--file'
23
+ # If the filename is sufficiently complex like access_log_prod_1020PMEST
24
+ # I'd recommend something like below with -k prod_access_log to force the key
25
+ # to be easier to facilitate mongo searches
26
+ #values:
27
+ # - '--key'
28
+
29
+ # Delimeter to join the regex array lines. Apache access is space delimited
30
+ delim: '\s*'
31
+ # Regex to be joined to parse each log line
32
+ # ex. 127.0.0.1 - - [25/Sep/2013:15:35:27 -0400] "INFO / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
33
+ regex:
34
+ - '(?<Host>\S+)' # host %h
35
+ - '(?<Identity>\S+)' # indent %l (unused)
36
+ - '(?<User>\S+)' # user %u
37
+ - '\[(?<Time>.+)\]' # time %t
38
+ - '"(?<Request>.+)"' # request "%r"
39
+ - '(?<Status>[0-9]+)' # status %>s
40
+ - '(?<Size>\S+)' # size %b (careful can be '-')
41
+ - '"(?<Referer>.*)"' # referer "%{Referer}i"
42
+ - '"(?<UserAgent>.*)"' # user agent "%{User-agent}i"
43
+ # Define which name in the hash to append contents to based on the regex group
44
+ #append_key_name: ''
45
+ # Any mappings not specified are assumed to be of type String
46
+ mapping:
47
+ - name: Time
48
+ data_type: DateTime
49
+ format: '%d/%b/%Y:%H:%M:%S %z'
50
+ - name: Status
51
+ data_type: Integer
52
+ - name: Size
53
+ data_type: Integer
54
+
55
+ # Data Types supported ['DateTime' 'Integer', 'Float', 'String']
56
+ jboss_log4j_common:
57
+ db_key:
58
+ delim: '_'
59
+ values:
60
+ - '--key'
61
+ - '--file'
62
+ # Delimeter to join the regex array lines. Apache access is space delimited
63
+ delim: '\s+'
64
+ # Regex to be joined to parse each log line
65
+ # <!-- The default pattern: Date Priority [Category] (Thread) Message\n -->
66
+ # <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
67
+ # (?<Date>.*?)\s+(?<Priority>WARN|ERROR|INFO|TRACE|DEBUG)\s+\[(?<Category>.*?)\]\s+\((?<Thread>.*?)\)\s+(?<Message>.*)
68
+ regex:
69
+ - '(?<Date>.*?)'
70
+ - '(?<Priority>WARN|ERROR|INFO|TRACE|DEBUG)'
71
+ - '\[(?<Category>.*?)\]'
72
+ - '\((?<Thread>.*?)\)'
73
+ - '(?<Message>.*)'
74
+ # For lines that don't match the regex above, define a key name if you want the log line
75
+ # TO be appended to a previously matched line
76
+ unmatched_append_key_name: 'Message'
77
+ # Define a regex pattern to define any matched lines to append to the previously matched line
78
+ # Example: 03 Oct 2013 20:16:55,309 ERROR [stderr] (MSC service thread 1-3) at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116)
79
+ match_forward_regex:
80
+ - '(?<Date>.*?)'
81
+ - '(?<Priority>WARN|ERROR|INFO|TRACE|DEBUG)'
82
+ - '\[(?<Category>.*?)\]'
83
+ - '\((?<Thread>.*?)\)'
84
+ - '(?<Message>\tat\s.*?)'
85
+
86
+ # Define the hash key to read from, otherwise default to the entire line
87
+ match_forward_keyname_source: 'Message'
88
+
89
+ # Define the hash key to read to, Mandatory if match_forward_regex defined
90
+ match_forward_keyname_dest: 'Message'
91
+ # Any mappings not specified are assumed to be of type String
92
+ #mapping:
93
+ # - name: Status
94
+ # data_type: Integer
95
+ # - name: Size
96
+ # data_type: Integer
@@ -0,0 +1,50 @@
1
+ 127.0.0.103 - - [03/Oct/2013:12:31:00 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
2
+ 127.0.0.224 - - [03/Oct/2013:12:31:03 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
3
+ 127.0.0.229 - - [03/Oct/2013:12:32:36 -0400] "STATUS / HTTP/1.0" 500 648 "-" "ClusterListener/1.0"
4
+ 127.0.0.229 - - [03/Oct/2013:12:32:46 -0400] "INFO / HTTP/1.0" 200 3403 "-" "ClusterListener/1.0"
5
+ 127.0.0.229 - - [03/Oct/2013:12:32:46 -0400] "CONFIG / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
6
+ 127.0.0.229 - - [03/Oct/2013:12:32:46 -0400] "ENABLE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
7
+ 127.0.0.228 - - [03/Oct/2013:12:33:23 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
8
+ 127.0.0.120 - - [03/Oct/2013:12:33:30 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
9
+ 127.0.0.226 - - [03/Oct/2013:12:33:59 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
10
+ 127.0.0.126 - - [03/Oct/2013:12:34:00 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
11
+ 127.0.0.224 - - [03/Oct/2013:12:34:26 -0400] "REMOVE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
12
+ 127.0.0.225 - - [03/Oct/2013:12:34:50 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
13
+ 127.0.0.224 - - [03/Oct/2013:12:35:01 -0400] "INFO / HTTP/1.0" 200 3652 "-" "ClusterListener/1.0"
14
+ 127.0.0.100 - - [03/Oct/2013:12:35:28 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
15
+ 127.0.0.122 - - [03/Oct/2013:12:35:40 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
16
+ 127.0.0.102 - - [03/Oct/2013:12:36:49 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
17
+ 127.0.0.103 - - [03/Oct/2013:12:37:28 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
18
+ 127.0.0.229 - - [03/Oct/2013:12:39:04 -0400] "STATUS / HTTP/1.0" 500 648 "-" "ClusterListener/1.0"
19
+ 127.0.0.229 - - [03/Oct/2013:12:39:14 -0400] "INFO / HTTP/1.0" 200 3317 "-" "ClusterListener/1.0"
20
+ 127.0.0.229 - - [03/Oct/2013:12:39:14 -0400] "CONFIG / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
21
+ 127.0.0.229 - - [03/Oct/2013:12:39:14 -0400] "ENABLE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
22
+ 127.0.0.1 - - [03/Oct/2013:12:39:39 -0400] "GET /x/ HTTP/1.1" 503 435 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; MS-RTC LM 8;)"
23
+ 127.0.0.1 - - [03/Oct/2013:12:39:49 -0400] "GET /x/ HTTP/1.1" 503 435 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; MS-RTC LM 8;)"
24
+ 127.0.0.228 - - [03/Oct/2013:12:39:51 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
25
+ 127.0.0.120 - - [03/Oct/2013:12:39:58 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
26
+ 127.0.0.226 - - [03/Oct/2013:12:40:27 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
27
+ 127.0.0.126 - - [03/Oct/2013:12:40:28 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
28
+ 127.0.0.225 - - [03/Oct/2013:12:41:18 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
29
+ 127.0.0.224 - - [03/Oct/2013:12:41:19 -0400] "CONFIG / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
30
+ 127.0.0.224 - - [03/Oct/2013:12:41:19 -0400] "ENABLE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
31
+ 127.0.0.100 - - [03/Oct/2013:12:41:56 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
32
+ 127.0.0.122 - - [03/Oct/2013:12:42:08 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
33
+ 127.0.0.224 - - [03/Oct/2013:12:42:42 -0400] "REMOVE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
34
+ 127.0.0.102 - - [03/Oct/2013:12:43:17 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
35
+ 127.0.0.224 - - [03/Oct/2013:12:43:23 -0400] "INFO / HTTP/1.0" 200 3652 "-" "ClusterListener/1.0"
36
+ 127.0.0.103 - - [03/Oct/2013:12:43:56 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
37
+ 127.0.0.229 - - [03/Oct/2013:12:45:32 -0400] "STATUS / HTTP/1.0" 500 648 "-" "ClusterListener/1.0"
38
+ 127.0.0.229 - - [03/Oct/2013:12:45:42 -0400] "INFO / HTTP/1.0" 200 3317 "-" "ClusterListener/1.0"
39
+ 127.0.0.229 - - [03/Oct/2013:12:45:42 -0400] "CONFIG / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
40
+ 127.0.0.229 - - [03/Oct/2013:12:45:42 -0400] "ENABLE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
41
+ 127.0.0.228 - - [03/Oct/2013:12:46:19 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
42
+ 127.0.0.120 - - [03/Oct/2013:12:46:26 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
43
+ 127.0.0.226 - - [03/Oct/2013:12:46:55 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
44
+ 127.0.0.126 - - [03/Oct/2013:12:46:56 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
45
+ 127.0.0.225 - - [03/Oct/2013:12:47:46 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
46
+ 127.0.0.100 - - [03/Oct/2013:12:48:24 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
47
+ 127.0.0.122 - - [03/Oct/2013:12:48:36 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
48
+ 127.0.0.224 - - [03/Oct/2013:12:49:41 -0400] "CONFIG / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
49
+ 127.0.0.224 - - [03/Oct/2013:12:49:41 -0400] "ENABLE-APP / HTTP/1.0" 200 - "-" "ClusterListener/1.0"
50
+ 127.0.0.102 - - [03/Oct/2013:12:49:45 -0400] "STATUS / HTTP/1.0" 200 86 "-" "ClusterListener/1.0"
@@ -0,0 +1,3 @@
1
+ module Splog
2
+ VERSION = '0.0.2'
3
+ end