logviewer 1.7.1 → 2.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 201ea49b993ea3d24eaf773e3eb91cbab5c09f59f17de43fde8aa46e78a4b562
4
- data.tar.gz: d34fbc21f761a3a19e11abdb16c4f0c788a15217ff688952dd8fdfc649f4353e
3
+ metadata.gz: c8522ad4cc90d0a8bd8931c4aac6480ee292f1cc42aeb763bbbeb1663b2114ce
4
+ data.tar.gz: 685d0be973a04e95385374eb71d393c27d67668a9d9e52d765a602bc1567980f
5
5
  SHA512:
6
- metadata.gz: cb59704baed1df15d3772d9951b3c85d744fe47e040d4f3db8dfc82a2448d4a22a7be9c7dc078c9af533cbcbfc488053b0f00ff0a7c45b801bf808a4898d0a1d
7
- data.tar.gz: 6786c7b3edb7bc7e91bb9da5f7a0754064d2b66f8ebc52ad710221de560328e67697757e12b3649b82dbfde000484e616403a5735b74d95f6f351c8a84d0ab07
6
+ metadata.gz: e699cbe1bacb51d20ee6fbf57716d51353adcba3d61e13e7f0d1178d46f7a9ef108e5cf3a9bab1c80e195b3930978a5ac4db4ef634e2c1442e639bf0d2ea509a
7
+ data.tar.gz: d7d0e1b67f50707209cb74fe14d4f3ae542c11e3ec49fa7a743554c3c4f81288b7719e0ac342589c6686edb1d2b19251de95e30e9173eb0336c3475c2b34ea16
data/README.md CHANGED
@@ -5,7 +5,7 @@ A Ruby gem that converts NDJSON log files into a readable HTML format for easy v
5
5
  ## Features
6
6
 
7
7
  - Converts NDJSON log files to HTML tables
8
- - Filters logs by minimum level (trace, debug, info, warning, error, fatal)
8
+ - Filters logs by minimum level (trace, debug, info, notice, warning, error, critical)
9
9
  - Displays key fields: date, level, tag, file, function, and text
10
10
  - Human-readable timestamp formatting (MM/DD HH:MM:SS)
11
11
  - Simplified file paths (shows only filename, not full path)
@@ -62,7 +62,7 @@ This will find the most recent `.ndjson` file in the current directory and apply
62
62
 
63
63
  ### Command Line Options
64
64
 
65
- - `-l, --level LEVEL`: Set minimum log level (trace, debug, info, warning, error, fatal)
65
+ - `-l, --level LEVEL`: Set minimum log level (trace, debug, info, notice, warning, error, critical)
66
66
  - `-v, --version`: Show version
67
67
  - `-h, --help`: Show help message
68
68
 
@@ -89,16 +89,16 @@ logviewer --version
89
89
 
90
90
  The tool expects NDJSON (newline-delimited JSON) files where each line contains a JSON object with these fields:
91
91
 
92
- - `timestamp`: ISO 8601 timestamp (e.g., "2025-06-02T18:22:48.855-07:00") (displayed as MM/DD HH:MM:SS)
93
- - `level`: Log level (trace, debug, info, warning, error, fatal)
94
- - `tag`: Category or module tag (e.g., "Play/manager")
95
- - `text`: The log message
92
+ - `timestamp`: Unix timestamp in milliseconds since epoch (displayed as MM/DD HH:MM:SS)
93
+ - `levelName`: Log level (trace, debug, info, notice, warning, error, critical)
94
+ - `subsystem` and `category`: Combined to create tag display (e.g., "Play/avPlayer")
95
+ - `message`: The log message
96
96
  - `file`: Source file path (displayed as filename only)
97
- - `method`: Function/method name
97
+ - `function`: Function/method name
98
98
 
99
99
  Example log entry:
100
100
  ```json
101
- {"timestamp":"2025-06-02T18:22:48.855-07:00","level":"info","tag":"Auth/manager","text":"User logged in successfully","file":"auth.rb","method":"login"}
101
+ {"timestamp":1749926447359,"levelName":"debug","subsystem":"Play","category":"avPlayer","message":"pausing","file":"PodHaven/PodAVPlayer.swift","function":"pause(overwritePreSeekStatus:)","line":136}
102
102
  ```
103
103
 
104
104
  ## Output
@@ -1,3 +1,3 @@
1
1
  module LogViewer
2
- VERSION = "1.7.1"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/logviewer.rb CHANGED
@@ -10,9 +10,10 @@ module LogViewer
10
10
  'trace' => 0,
11
11
  'debug' => 1,
12
12
  'info' => 2,
13
- 'warning' => 3,
14
- 'error' => 4,
15
- 'fatal' => 5
13
+ 'notice' => 3,
14
+ 'warning' => 4,
15
+ 'error' => 5,
16
+ 'critical' => 6
16
17
  }
17
18
 
18
19
  def initialize(args = ARGV)
@@ -25,7 +26,7 @@ module LogViewer
25
26
  OptionParser.new do |opts|
26
27
  opts.banner = "Usage: logviewer [options] [ndjson_file]"
27
28
 
28
- opts.on('-l', '--level LEVEL', 'Minimum log level (trace, debug, info, warning, error, fatal)') do |level|
29
+ opts.on('-l', '--level LEVEL', 'Minimum log level (trace, debug, info, notice, warning, error, critical)') do |level|
29
30
  level = level.downcase
30
31
  if LOG_LEVELS.key?(level)
31
32
  @min_level = level
@@ -85,14 +86,20 @@ module LogViewer
85
86
  begin
86
87
  log_entry = JSON.parse(line.strip)
87
88
 
88
- if should_include_log?(log_entry['level'])
89
+ if should_include_log?(log_entry['levelName'])
90
+ # Build tag from subsystem/category
91
+ tag = []
92
+ tag << log_entry['subsystem'] if log_entry['subsystem']
93
+ tag << log_entry['category'] if log_entry['category']
94
+ tag_string = tag.join('/')
95
+
89
96
  logs << {
90
97
  timestamp: log_entry['timestamp'] || '',
91
- level: log_entry['level'] || 'unknown',
92
- tag: log_entry['tag'] || '',
93
- text: log_entry['text'] || '',
98
+ level: log_entry['levelName'] || 'unknown',
99
+ tag: tag_string,
100
+ text: log_entry['message'] || '',
94
101
  file: log_entry['file'] || '',
95
- method: log_entry['method'] || ''
102
+ method: log_entry['function'] || ''
96
103
  }
97
104
  end
98
105
  rescue JSON::ParserError => e
@@ -111,25 +118,28 @@ module LogViewer
111
118
  '#adb5bd'
112
119
  when 'info'
113
120
  '#6ea8fe'
121
+ when 'notice'
122
+ '#ffc107'
114
123
  when 'warning'
115
124
  '#fd9843'
116
125
  when 'error'
117
126
  '#ea868f'
118
- when 'fatal'
127
+ when 'critical'
119
128
  '#c29ffa'
120
129
  else
121
130
  '#e0e0e0'
122
131
  end
123
132
  end
124
133
 
125
- def format_timestamp(timestamp_str)
126
- return '' if timestamp_str.nil? || timestamp_str.empty?
134
+ def format_timestamp(timestamp)
135
+ return '' if timestamp.nil? || timestamp == ''
127
136
 
128
137
  begin
129
- time = Time.parse(timestamp_str)
138
+ # Convert milliseconds to seconds for Time.at
139
+ time = Time.at(timestamp / 1000.0)
130
140
  time.strftime('%m/%d %H:%M:%S')
131
141
  rescue => e
132
- timestamp_str # fallback to original if parsing fails
142
+ timestamp.to_s # fallback to original if parsing fails
133
143
  end
134
144
  end
135
145
 
@@ -324,9 +334,10 @@ module LogViewer
324
334
  'trace': 0,
325
335
  'debug': 1,
326
336
  'info': 2,
327
- 'warning': 3,
328
- 'error': 4,
329
- 'fatal': 5
337
+ 'notice': 3,
338
+ 'warning': 4,
339
+ 'error': 5,
340
+ 'critical': 6
330
341
  };
331
342
 
332
343
  const levelFilter = document.getElementById('levelFilter');
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logviewer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Bishop
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-07 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bundler
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  requirements: []
73
- rubygems_version: 3.6.6
73
+ rubygems_version: 3.6.9
74
74
  specification_version: 4
75
75
  summary: Convert NDJSON log files to HTML for easy viewing
76
76
  test_files: []