apache_log_tail 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/apache_log_tail.rb +41 -21
- metadata +6 -5
data/lib/apache_log_tail.rb
CHANGED
@@ -1,40 +1,43 @@
|
|
1
1
|
|
2
2
|
# Facilitates reading the most recent additions to a log file.
|
3
3
|
#
|
4
|
-
# Note that rotation of log files is *not* handled.
|
5
|
-
#
|
6
4
|
# Example:
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
5
|
+
# tail = LogTail.new "/var/log/apache2/access.log"
|
6
|
+
# tail.state_store.path_to_file = "/tmp/my-state.txt" # Optional: there is a default path
|
7
|
+
# tail.each_new_line {|line| puts line }
|
8
|
+
#
|
9
|
+
# ## A custom StateStore
|
10
|
+
#
|
11
|
+
# tail.state_store = MyStateStore.new
|
12
|
+
#
|
13
|
+
# A StateStore object must provide these methods:
|
10
14
|
#
|
15
|
+
# - remember( state:Hash)
|
16
|
+
# - recall(): Hash
|
11
17
|
#
|
12
18
|
class LogTail
|
13
19
|
|
20
|
+
# @param [String] path_to_file the path to the file to process
|
21
|
+
#
|
14
22
|
def initialize path_to_file
|
15
23
|
@path_to_file = path_to_file
|
16
24
|
end
|
17
25
|
|
18
|
-
|
19
|
-
# Provides a StateStore object that provides persistent storage of a Hash.
|
26
|
+
# The StateStore provides persistent storage of a Hash.
|
20
27
|
#
|
21
28
|
def state_store
|
22
29
|
@state_store ||= FileStateStore.new
|
23
30
|
end
|
31
|
+
attr_writer :state_store
|
24
32
|
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# Example:
|
28
|
-
# >> tail.state_store = MyStateStore.new
|
33
|
+
# Goes through each line in the file that has not yet been processed and
|
34
|
+
# passes it to the block given.
|
29
35
|
#
|
30
|
-
#
|
36
|
+
# @param [String] path_to_file the path to the file that should be
|
37
|
+
# processed. This parameter is only intended
|
38
|
+
# for internal use ( processing rotated log
|
39
|
+
# files) and should be omitted for normal use
|
31
40
|
#
|
32
|
-
# - remember( state:Hash)
|
33
|
-
# - recall(): Hash
|
34
|
-
#
|
35
|
-
attr_writer :state_store
|
36
|
-
|
37
|
-
|
38
41
|
def each_new_line path_to_file = @path_to_file
|
39
42
|
|
40
43
|
# Recall the cursor ( the location in the log file where we left off
|
@@ -55,13 +58,15 @@ class LogTail
|
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
58
|
-
|
59
61
|
# This is the default implementation of StateStore, which stores the state in
|
60
62
|
# a file ( by default in /tmp with a static name although this is
|
61
63
|
# configurable).
|
62
64
|
#
|
63
65
|
class FileStateStore
|
64
66
|
|
67
|
+
# Provides the path to the file that is used to store the state ( unless a
|
68
|
+
# custom StateStore is used).
|
69
|
+
#
|
65
70
|
def path_to_file
|
66
71
|
@path_to_file ||= "/tmp/.apache_log_tail-state.yml"
|
67
72
|
end
|
@@ -69,6 +74,9 @@ class LogTail
|
|
69
74
|
|
70
75
|
require "yaml"
|
71
76
|
|
77
|
+
# Retrieves the state from the store.
|
78
|
+
# @return [Hash]
|
79
|
+
#
|
72
80
|
def recall
|
73
81
|
if not File.exists? path_to_file
|
74
82
|
{}
|
@@ -77,6 +85,9 @@ class LogTail
|
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
88
|
+
# Stores the supplied state.
|
89
|
+
# @param [Hash] state
|
90
|
+
#
|
80
91
|
def remember state
|
81
92
|
File.open path_to_file, "w" do |file|
|
82
93
|
file.write state.to_yaml
|
@@ -88,12 +99,21 @@ class LogTail
|
|
88
99
|
end
|
89
100
|
|
90
101
|
|
102
|
+
# (see LogTail)
|
103
|
+
#
|
104
|
+
# Will not miss any lines when the log file is rotated between two invocations
|
105
|
+
# of #each_new_line ( as long as the rotated file has the same name as the
|
106
|
+
# original except for a `.1` suffix and as long as the file hasn't been rotated
|
107
|
+
# twice between invocations of #each_new_line).
|
108
|
+
#
|
91
109
|
# Note that this class does no parse Apache log entries, only knows how Apache
|
92
|
-
# log files are rotated on Debian. I have enjoyed using the apachelogregex
|
93
|
-
# for parsing.
|
110
|
+
# log files are rotated on Debian. I have enjoyed using the `apachelogregex`
|
111
|
+
# gem for parsing.
|
94
112
|
#
|
95
113
|
class ApacheLogTail < LogTail
|
96
114
|
|
115
|
+
# (see LogTail#each_new_line)
|
116
|
+
#
|
97
117
|
# Note: This method must be invoked more frequently than the log file
|
98
118
|
# rotation period ( typically 1 week) otherwise an entire file will be
|
99
119
|
# missed.
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apache_log_tail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Neil Stockbridge
|
@@ -29,8 +29,8 @@ extra_rdoc_files: []
|
|
29
29
|
files:
|
30
30
|
- lib/apache_log_tail.rb
|
31
31
|
homepage: http://rubygems.org/gems/apache_log_tail
|
32
|
-
licenses:
|
33
|
-
|
32
|
+
licenses:
|
33
|
+
- MIT
|
34
34
|
post_install_message:
|
35
35
|
rdoc_options: []
|
36
36
|
|
@@ -63,3 +63,4 @@ specification_version: 3
|
|
63
63
|
summary: Process only the new lines from an Apache log file
|
64
64
|
test_files: []
|
65
65
|
|
66
|
+
has_rdoc:
|