ons-json-logger 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +37 -0
- data/lib/ons-json-logger/json_logger.rb +52 -0
- data/lib/ons-json-logger/version.rb +10 -0
- data/lib/ons-json-logger.rb +3 -0
- metadata +51 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 759ed29d813c6ac95eb31020797758b86b81eb1ac22e5139cda8f3fa3b107794
|
4
|
+
data.tar.gz: 03c07936733e47cb2863d880a27855a0ede25adcf9a09a6895429590302544f1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7043230cc29dab6ecab1915536eb8874527196d8cddba9d93ad177f07814bcf3dc9b1502f1c01e17e58ea09d92520d214718df2c96d9f4657cb35926da591e61
|
7
|
+
data.tar.gz: 7099ba5e33de14fba486d998e387575c4de4848eb0da3229d71ef2a0bab9c0c036b58833510dc653778b5e8d6097fb522901055b91d20dc7876c66c8cfd56fdf
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# ONS JSON Logger RubyGem
|
2
|
+
A utility class for generating structured JSON log entries with optional additional fields suitable for web applications. Note that this gem targets Ruby 3.1 and above.
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
```
|
6
|
+
gem install ons-json-logger
|
7
|
+
```
|
8
|
+
|
9
|
+
## Examples
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
require 'logger'
|
13
|
+
require 'ons-json-logger'
|
14
|
+
require 'sinatra'
|
15
|
+
|
16
|
+
LOGGER = Logger.new($stdout)
|
17
|
+
JSON_LOGGER = JSONLogger.new(application: 'amazing-webapp', environment: 'production')
|
18
|
+
|
19
|
+
get '/signout' do
|
20
|
+
LOGGER.info(JSON_LOGGER.log(level: 'INFO',
|
21
|
+
message: 'User signed out',
|
22
|
+
module_name: 'app',
|
23
|
+
user: { id: @user_login_id, ip_address: @client_ip },
|
24
|
+
http: { method: 'GET', path: '/signout', status: 200, user_agent: request.user_agent }))
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
## Testing
|
29
|
+
```
|
30
|
+
rake test
|
31
|
+
```
|
32
|
+
|
33
|
+
## Licence
|
34
|
+
This library is licensed under the MIT licence. Full licence text is available in [LICENCE](LICENCE).
|
35
|
+
|
36
|
+
## Copyright
|
37
|
+
Copyright (C) 2024 Crown Copyright (Office for National Statistics)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'time'
|
5
|
+
|
6
|
+
# Class that generates structured JSON log entries.
|
7
|
+
class JSONLogger
|
8
|
+
# Constructor that initialises the JSON logger.
|
9
|
+
#
|
10
|
+
# @param application [String] the name of the application
|
11
|
+
# @param environment [String] the name of the environment the application is deployed to. Defaults to +development+
|
12
|
+
# @raise [ArgumentError] if application is nil
|
13
|
+
def initialize(application:, environment: 'development')
|
14
|
+
raise ArgumentError, 'application cannot be nil' if application.nil?
|
15
|
+
|
16
|
+
@application = application
|
17
|
+
@environment = environment
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns a structured JSON log entry from the passed arguments.
|
21
|
+
#
|
22
|
+
# @param level the log level e.g. +DEBUG+, +ERROR+, +INFO+
|
23
|
+
# @param message the log message
|
24
|
+
# @param module_name the name of the application module/component generating the log message
|
25
|
+
# user optional Hash containing details of the user making the request such as username and IP address
|
26
|
+
# http optional Hash containing details of the HTTP request such as the method, path, status code and user agent
|
27
|
+
# error optional Hash containing details of an error that occurred such as the error code and message
|
28
|
+
# @raise [ArgumentError] if level is nil
|
29
|
+
# @raise [ArgumentError] id message is nil
|
30
|
+
# @raise [ArgumentError] if module_name is nil
|
31
|
+
def log(level:, message:, module_name:, user: {}, http: {}, error: {})
|
32
|
+
raise ArgumentError, 'level cannot be nil' if level.nil?
|
33
|
+
raise ArgumentError, 'message' if level.nil?
|
34
|
+
raise ArgumentError, 'module_name cannot be nil' if level.nil?
|
35
|
+
|
36
|
+
log_entry = {
|
37
|
+
timestamp: Time.now.utc.iso8601,
|
38
|
+
level:,
|
39
|
+
message:,
|
40
|
+
application: @application,
|
41
|
+
environment: @environment,
|
42
|
+
module: module_name
|
43
|
+
}
|
44
|
+
|
45
|
+
# Add optional fields if they are provided.
|
46
|
+
log_entry[:user] = user unless user.empty?
|
47
|
+
log_entry[:http] = http unless http.empty?
|
48
|
+
log_entry[:error] = error unless error.empty?
|
49
|
+
|
50
|
+
JSON.generate(log_entry)
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ons-json-logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Topley
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-01-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: 'A utility class for generating structured JSON log entries with optional
|
14
|
+
additional fields suitable for web applications.
|
15
|
+
|
16
|
+
'
|
17
|
+
email:
|
18
|
+
- john.topley@ons.gov.uk
|
19
|
+
executables: []
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- README.md
|
24
|
+
- lib/ons-json-logger.rb
|
25
|
+
- lib/ons-json-logger/json_logger.rb
|
26
|
+
- lib/ons-json-logger/version.rb
|
27
|
+
homepage: https://github.com/ONSdigital/ons-json-logger
|
28
|
+
licenses:
|
29
|
+
- MIT
|
30
|
+
metadata:
|
31
|
+
rubygems_mfa_required: 'true'
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.1.0
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubygems_version: 3.3.15
|
48
|
+
signing_key:
|
49
|
+
specification_version: 4
|
50
|
+
summary: A class for generating structured JSON log entries.
|
51
|
+
test_files: []
|