log4jruby 3.0.0.rc1-java → 3.0.0.rc3-java

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: 63ae3e7cb5a390af7767e58ce30270c32cc3c770ba877ce0932627e3efab1607
4
- data.tar.gz: d80186abc03df7b0a2b10befcdda3084eef5cffeb4e1960ce957930d6be1e850
3
+ metadata.gz: f490ce9d3d34da275ebe45ea7f79fcb059bd1eb65382b7caad07ac56cff39319
4
+ data.tar.gz: 52f088f32e0ed016a29d0b1aad801980eff8998823f364b48046dab02c732ecb
5
5
  SHA512:
6
- metadata.gz: bbc3e978c3d27fe325b135ff988b063f928daadec1a3608d8cfd891766ab2eefa3e0dc08c60ae3dae9835760236fbcb6e84152bcc2cef8faebfb7d8f2b407bf9
7
- data.tar.gz: 61d52687aa0b3d1658fb29c0c543e0e7ba45789799ebaabc640fa4f2570ea1d395972c856118bfb2e34e45d3c4780dd3e1e45285c609ae7c8c26455a4a9595ad
6
+ metadata.gz: 60f2e59dc9dde9a1ae8b802dc76ac7ecf41498abcea404d2747c9fb189091f4ef8ef5d2ac05bafbe8170620bf1f273d431e80467bab38a57802ee0e72a46ff32
7
+ data.tar.gz: 0c4d4826ee902621b4f4b0847974b5403dba21d2e0c8fc63d8f3a253d64c3d6f981d2c38378b6b9780e9aae36a8cdc650145bfb2594ac38afa67e6a70302717e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # log4jruby Changelog
2
2
 
3
+ ## v3.0.0.rc3
4
+
5
+ * Resolve [missing backtraces with Rails](https://github.com/lenny/log4jruby/issues/27). Stringify
6
+ exceptions outside of the formatter because `ActiveSupport::TaggedLogging` broke
7
+ the `LegacyShimFormatter`. The `LegacyShimFormatter` was formerly responsible for outputing
8
+ backtraces in JRuby < 9.3
9
+ * Optimizations to `Log4jruby::Support::JrubyVersion`
10
+
11
+ ## v3.0.0.rc2
12
+
13
+ * Restored support for JRuby 9.1.x/Ruby 2.3
14
+
3
15
  ## v3.0.0.rc1
4
16
 
5
17
  * JRuby 9.3.x/Ruby 2.6 support - Ruby >= 2.6.8 now required
data/README.md CHANGED
@@ -151,6 +151,10 @@ The default Log4jruby formatter outputs `progname` and `msg` only (as opposed to
151
151
  Severity, timestamp, and backtraces are handed according to your `Log4j` configuration.
152
152
  E.g. [PatternLayout](https://logging.apache.org/log4j/2.x/manual/layouts.html).
153
153
 
154
+ * For JRuby versions < 9.3, Ruby exceptions are not passed directly to the `Throwable` arg of log4j. Instead,
155
+ backtraces are included in the log message by the default formatter. This means that `%throwable` in
156
+ the log4j config will not affect ruby exceptions for Jruby < 9.3.
157
+
154
158
  The output of the `formatter` is passed as the `message` parameter of the [Log4j log methods](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Category.html#log(org.apache.log4j.Priority,%20java.lang.Object).
155
159
 
156
160
  ## Development
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
4
+
3
5
  require 'log4jruby/support/log4j_args'
4
6
  require 'log4jruby/support/levels'
5
7
  require 'log4jruby/support/location'
6
8
  require 'log4jruby/support/log_manager'
7
- require 'logger'
9
+ require 'log4jruby/support/formatter'
10
+ require 'log4jruby/support/jruby_version'
11
+ require 'log4jruby/support/ruby_backtrace_shim'
8
12
 
9
13
  module Log4jruby
10
14
  # Author:: Lenny Marks
@@ -121,7 +125,7 @@ module Log4jruby
121
125
  return @formatter if defined?(@formatter)
122
126
 
123
127
  @formatter = if self == Logger.root
124
- ->(_severity, _datetime, progname, msg) { "-- #{progname}: #{msg}" }
128
+ Support::Formatter.new
125
129
  else
126
130
  parent.formatter
127
131
  end
@@ -156,6 +160,9 @@ module Log4jruby
156
160
 
157
161
  def send_to_log4j(level, object, &block)
158
162
  progname, msg, throwable = Support::Log4jArgs.convert(object, &block)
163
+ unless Support::JrubyVersion.native_ruby_stacktraces_supported?
164
+ msg = Support::RubyBacktraceShim.adapt(msg)
165
+ end
159
166
  if (f = formatter)
160
167
  msg = f.call(level, Time.now, progname, msg)
161
168
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Log4jruby
4
+ module Support
5
+ # Default ruby Logger formatter
6
+ # This formatter mimics
7
+ # [Logger::Formatter](https://ruby-doc.org/stdlib-2.6.4/libdoc/logger/rdoc/Logger/Formatter.html)
8
+ # but excludes log level and timestamp to leave it for the Log4j config
9
+ class Formatter
10
+ def call(_severity, _time, progname, msg)
11
+ "-- #{progname}: #{msg}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Log4jruby
4
+ module Support
5
+ # Class for explicitly marking JRuby version specific code.
6
+ # Find consumers and remove this and references when no longer needed.
7
+ class JrubyVersion
8
+ class << self
9
+ attr_reader :native_ruby_stacktraces_supported
10
+
11
+ def native_ruby_stacktraces_supported?
12
+ @native_ruby_stacktraces_supported
13
+ end
14
+
15
+ private
16
+
17
+ def init
18
+ @native_ruby_stacktraces_supported =
19
+ Gem::Version.new(JRUBY_VERSION) >= Gem::Version.new('9.3')
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ Log4jruby::Support::JrubyVersion.send(:init)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'log4jruby/support/jruby_version'
4
+
3
5
  module Log4jruby
4
6
  module Support
5
7
  # Translate logger args for use by Ruby Logger formatter and log4j.
@@ -37,7 +39,10 @@ module Log4jruby
37
39
  end
38
40
 
39
41
  def exception(obj)
40
- obj.is_a?(::Exception) || obj.is_a?(Java::java.lang.Throwable) ? obj : nil
42
+ if (JrubyVersion.native_ruby_stacktraces_supported? && obj.is_a?(::Exception)) ||
43
+ obj.is_a?(Java::java.lang.Throwable)
44
+ obj
45
+ end
41
46
  end
42
47
  end
43
48
  end
@@ -17,7 +17,7 @@ module Log4jruby
17
17
  end
18
18
 
19
19
  def get_or_create(name)
20
- raise 'name required' if name.to_s.match?(/^\s+$/)
20
+ raise 'name required' if name.to_s.match(/^\s+$/)
21
21
 
22
22
  @mutex.synchronize do
23
23
  @loggers[name] ||= new_logger(name)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Log4jruby
4
+ module Support
5
+ # Transform exceptions into string with full backtraces and nested causes.
6
+ module RubyBacktraceShim
7
+ class << self
8
+ def adapt(msg)
9
+ return msg unless msg.is_a?(::Exception)
10
+
11
+ exception2str(msg)
12
+ end
13
+
14
+ private
15
+
16
+ def exception2str(exception)
17
+ "#{exception.message} (#{exception.class})\n\t#{exception.backtrace&.join("\n\t")}" \
18
+ "#{"\nCaused by: #{exception2str(exception.cause)}" if exception.cause}"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Log4jruby
4
- VERSION = '3.0.0.rc1'
4
+ VERSION = '3.0.0.rc3'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: log4jruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc1
4
+ version: 3.0.0.rc3
5
5
  platform: java
6
6
  authors:
7
7
  - Lenny Marks
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-06 00:00:00.000000000 Z
11
+ date: 2022-10-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby Logger using Log4j, geared toward those who use JRuby to write Ruby
14
14
  code using/extending Java code. Ruby and Java are configured together using traditional
@@ -24,10 +24,13 @@ files:
24
24
  - lib/log4jruby.rb
25
25
  - lib/log4jruby/logger.rb
26
26
  - lib/log4jruby/logger_for_class.rb
27
+ - lib/log4jruby/support/formatter.rb
28
+ - lib/log4jruby/support/jruby_version.rb
27
29
  - lib/log4jruby/support/levels.rb
28
30
  - lib/log4jruby/support/location.rb
29
31
  - lib/log4jruby/support/log4j_args.rb
30
32
  - lib/log4jruby/support/log_manager.rb
33
+ - lib/log4jruby/support/ruby_backtrace_shim.rb
31
34
  - lib/log4jruby/version.rb
32
35
  homepage: https://github.com/lenny/log4jruby
33
36
  licenses:
@@ -40,9 +43,9 @@ require_paths:
40
43
  - lib
41
44
  required_ruby_version: !ruby/object:Gem::Requirement
42
45
  requirements:
43
- - - "~>"
46
+ - - ">="
44
47
  - !ruby/object:Gem::Version
45
- version: 2.6.8
48
+ version: 2.3.3
46
49
  required_rubygems_version: !ruby/object:Gem::Requirement
47
50
  requirements:
48
51
  - - ">"