Add read_logs.rb scripts
This commit is contained in:
parent
e9bf0d84b8
commit
897fb7ece0
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
/dist-newstyle/
|
||||
/config.toml
|
||||
/log/
|
||||
|
25
README.md
25
README.md
@ -25,4 +25,29 @@ and in another session:
|
||||
curl localhost:8082
|
||||
```
|
||||
|
||||
## read\_logs.rb
|
||||
|
||||
read\_logs.rb looks in the `log/` directory for files ending with `.log`,
|
||||
`.log.1`, `.log.2.gz`, `.log.3.gz` and so forth. It filters out lines starting
|
||||
with a timestamp, `yyyy-mm-ddThh:mm:ss`, followed by random characters and a
|
||||
custom string provided as the only command line parameter. Finally
|
||||
it outputs all matched content after the provided string along with the date.
|
||||
|
||||
The log files are read in the order based on the number in the filename.
|
||||
|
||||
For example calling the script as
|
||||
|
||||
```sh
|
||||
./bin/read_logs.rb 'doctrine.INFO:'
|
||||
```
|
||||
|
||||
on a log file containing
|
||||
`[2025-02-04T19:51:49.356093+01:00] doctrine.INFO: Disconnecting [] []`
|
||||
|
||||
will print:
|
||||
|
||||
```
|
||||
2025-02-04 (Disconnecting [])
|
||||
```
|
||||
|
||||
## tea-cleaner
|
||||
|
59
bin/read_logs.rb
Executable file
59
bin/read_logs.rb
Executable file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'date'
|
||||
require 'zlib'
|
||||
require 'pathname'
|
||||
|
||||
class Visit
|
||||
attr_accessor :page, :date
|
||||
|
||||
def initialize(match_data)
|
||||
@date = Date.iso8601 match_data[1]
|
||||
@page = match_data[2].strip
|
||||
end
|
||||
end
|
||||
|
||||
def numeric_extension(filename)
|
||||
if filename.extname == '.gz'
|
||||
filename.sub_ext('').extname[1..-1].to_i
|
||||
elsif filename.extname == '.log'
|
||||
0
|
||||
else
|
||||
filename.extname[1..-1].to_i
|
||||
end
|
||||
end
|
||||
|
||||
entries = Dir.new('log')
|
||||
.entries
|
||||
.reject { |entry| entry.start_with? '.' }
|
||||
.map { |entry| Pathname.new entry }
|
||||
.sort { |a, b| numeric_extension(b) <=> numeric_extension(a) }
|
||||
|
||||
def read_lines(stream)
|
||||
if ARGV.length > 0
|
||||
regex = /([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}).+#{ARGV[0]}(.+) /
|
||||
else
|
||||
regex = /([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2})(.+) /
|
||||
end
|
||||
|
||||
stream
|
||||
.map { |line| line.match regex }
|
||||
.reject { |line| line.nil? }
|
||||
.map { |match_data| Visit.new match_data }
|
||||
end
|
||||
|
||||
lines_in_all_files = entries.flat_map do |log|
|
||||
log_path = Pathname.new('log') + log
|
||||
|
||||
if log_path.extname == '.gz'
|
||||
File.open log_path.to_s do |file|
|
||||
read_lines Zlib::GzipReader.new(file).readlines
|
||||
end
|
||||
else
|
||||
read_lines File.readlines(log_path.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
lines_in_all_files.each do |visit|
|
||||
puts "#{visit.date.strftime} (#{visit.page})"
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user