slf4r 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/README.txt +90 -34
- data/lib/generators/slf4r/log4j/USAGE +8 -0
- data/lib/generators/slf4r/log4j/log4j_generator.rb +20 -0
- data/lib/generators/slf4r/logging/USAGE +8 -0
- data/lib/generators/slf4r/logging/logging_generator.rb +9 -0
- data/lib/generators/slf4r/templates/log4j.properties +14 -0
- data/lib/generators/slf4r/templates/log4j.rb +19 -0
- data/lib/generators/slf4r/templates/logging.rb +6 -0
- data/lib/slf4r/init_slf4j.rb +22 -0
- data/lib/slf4r/ruby_logger.rb +1 -1
- data/lib/slf4r/slf4r_railtie.rb +41 -0
- data/lib/slf4r/version.rb +1 -1
- data/lib/slf4r.rb +2 -17
- data/spec/logger_helper.rb +4 -2
- data/spec/wrapper_logger_spec.rb +1 -0
- metadata +54 -18
- data/lib/slf4r/version.rb.errors +0 -0
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -1,48 +1,39 @@
|
|
1
1
|
= SLF4R
|
2
2
|
|
3
|
-
the main idea is from www.slf4j.org which is to provide
|
3
|
+
the main idea is from www.slf4j.org which is to provide an uniform interface for instantiating und using of a logger. but the actual logging is done by some third party logging framework.
|
4
4
|
|
5
|
-
|
5
|
+
the idea is to have a logger per class or object (see also http://slf4j.org/). in ruby you would have something like
|
6
6
|
|
7
7
|
@logger = Slf4r::LoggerFacade.new(self.class)
|
8
8
|
|
9
|
-
or the convinience module
|
9
|
+
or the convinience module inside any class which needs logging
|
10
10
|
|
11
11
|
include Slf4r::Logger
|
12
12
|
|
13
|
-
if the underlying logging framework allows it (like logging or log4r) then you get a logger for each namespace of your class and create a hierachy of loggers. with this you can control the log level for each logger and/or namespace separately.
|
13
|
+
if the underlying logging framework allows it (like logging or log4r) then you get a logger for each namespace of your class and create a hierachy of loggers. with this you can control the log level for each logger and/or namespace separately or any branch of the hierachy tree.
|
14
14
|
|
15
15
|
for example you have a framework A with namespace 'A' then you can set the log level for the logger with name 'A' to debug and get all the debug from the framework, etc.
|
16
16
|
|
17
17
|
in case you have a framework B which uses log4r internally you can use the 'log4r_adapter' to delegate the logger creation from log4r to slf4r. in this way you have only one place where logging gets configured and controlled.
|
18
18
|
|
19
|
-
== FEATURES:
|
20
|
-
|
21
|
-
* can replace other logging frameworks via adapters
|
22
|
-
|
23
|
-
* for the actual logging it depends on a third party logging framework and its configuration
|
24
|
-
|
25
19
|
== SYNOPSIS:
|
26
20
|
|
27
21
|
=== using with logging gem
|
28
22
|
|
29
23
|
require 'slf4r/logging_logger'
|
30
24
|
|
31
|
-
Logging.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
logger = Logging::Logger.new(:root)
|
36
|
-
logger.add_appenders(appender)
|
37
|
-
logger.level = :debug
|
25
|
+
Logging.logger.root.appenders = Logging.appenders.file("developent.log"),
|
26
|
+
:level => :debug,
|
27
|
+
:layout => Logging.layouts.pattern(:pattern => '%d %l (%c) - %m\n')
|
28
|
+
)
|
38
29
|
|
39
|
-
=== using with ruby logger
|
30
|
+
=== using with ruby logger (from MRI)
|
40
31
|
|
41
32
|
require 'slf4r/ruby_logger'
|
42
33
|
|
43
|
-
|
44
|
-
|
45
|
-
|
34
|
+
Slf4r::LoggerFacade4RubyLogger.level = :warn # default :debug
|
35
|
+
Slf4r::LoggerFacade4RubyLogger.file = "development.log" # default STDOUT
|
36
|
+
Slf4r::LoggerFacade4RubyLogger.dateformat = "%Y%m%d %H:%M:%S - " # default "%Y-%m-%d %H:%M:%S "
|
46
37
|
|
47
38
|
=== using with rails/merb/datamapper logger
|
48
39
|
|
@@ -52,33 +43,98 @@ Slf4r::LoggerFacade4WrappedLogger.logger = framwork_logger
|
|
52
43
|
|
53
44
|
=== using with slf4j with jruby
|
54
45
|
|
46
|
+
require 'slf4r/init_slf4j'
|
47
|
+
|
55
48
|
just get the needed jar files/ configuration files in the classpath
|
56
|
-
(see http://slf4j.org/) or if you use maven then have a look
|
57
|
-
pom.xml of
|
49
|
+
(see http://slf4j.org/) or if you use maven then have a look at the
|
50
|
+
pom.xml of this very project.
|
58
51
|
|
59
|
-
|
52
|
+
this require falls back on the standard ruby logger if there is no slf4j in the classpath.
|
60
53
|
|
61
|
-
|
54
|
+
=== usign a noop logger
|
62
55
|
|
63
|
-
|
56
|
+
require 'slf4r/noop_logger'
|
64
57
|
|
65
|
-
|
58
|
+
=== getting an instance of a logger
|
66
59
|
|
67
|
-
|
60
|
+
* logger = Slf4r::LoggerFacade.new("Fully::Qualified::Class::Name")
|
61
|
+
or
|
62
|
+
* logger = Slf4r::LoggerFacade.new("any name you wish")
|
63
|
+
or
|
64
|
+
* logger = Slf4r::LoggerFacade.new(Fully::Qualified::Class::Name)
|
68
65
|
|
69
|
-
|
66
|
+
there are following log-levels:
|
67
|
+
* logger.debug("asd") or logger.debug { "asd" } and logger.debug?
|
68
|
+
* logger.info("asd") or logger.info { "asd" } and logger.warn?
|
69
|
+
* logger.warn("asd") or logger.warn { "asd" } and logger.info?
|
70
|
+
* logger.error("asd") or logger.error { "asd" } and logger.error?
|
71
|
+
* logger.fatal("asd") or logger.fatal { "asd" } and logger.fatal?
|
70
72
|
|
71
|
-
|
73
|
+
the block variant will evaluate the block only if the log level indicates logging to avoid needless string operations.
|
72
74
|
|
73
|
-
*
|
75
|
+
* logger.name
|
76
|
+
will return the log category or name
|
74
77
|
|
75
78
|
== INSTALL:
|
76
79
|
|
77
|
-
|
80
|
+
=== general
|
81
|
+
|
82
|
+
$ gem install slf4r
|
83
|
+
|
84
|
+
=== Rails3
|
85
|
+
|
86
|
+
=== use the Rails.logger as slf4r logger
|
87
|
+
|
88
|
+
add in your Gemfile
|
89
|
+
|
90
|
+
gem 'slf4r'
|
91
|
+
|
92
|
+
=== rails generators
|
93
|
+
|
94
|
+
setup a log4j logging (fallback on rails logging without JRUBY)
|
95
|
+
|
96
|
+
$ rails3 generate slf4r:log4j
|
97
|
+
|
98
|
+
but to use this you need to add slf4j-log4j12-1.6.1.jar to you classpath or require the jar. see below how to do this with ruby-maven gem.
|
99
|
+
|
100
|
+
setup a logging from logging gem
|
101
|
+
|
102
|
+
$ rails3 generate slf4r:logging
|
103
|
+
|
104
|
+
all these setups use the same files as default rails and adjust the log level from the rails config. they establish the folowing categories:
|
105
|
+
* Rails
|
106
|
+
* <NAME>.Application # where the name is your application name
|
107
|
+
* ActionController
|
108
|
+
* ActiveRecord
|
109
|
+
* ActionView
|
110
|
+
* ActionMailer
|
111
|
+
* ActiveSupport::Cache::Store
|
112
|
+
|
113
|
+
== use ruby-maven to add jar files to your rails3 application (experimental)
|
114
|
+
|
115
|
+
install it with
|
116
|
+
$ jruby -S gem install ruby-maven --pre
|
117
|
+
|
118
|
+
then you can run the rails3 with log4j wioth
|
119
|
+
$ rmvn rails server
|
120
|
+
or the generator
|
121
|
+
$ rmv rails generate . .
|
122
|
+
or the rake
|
123
|
+
$ rmvn rake . . .
|
124
|
+
or console/dbconsole
|
125
|
+
$ rmvn rails console
|
126
|
+
$ rmvn rails dbconsole
|
127
|
+
or run the server in jetty
|
128
|
+
$ jetty-run
|
129
|
+
|
130
|
+
*NOTE* it is a prerelease so there are bugs and limitations
|
78
131
|
|
79
|
-
|
132
|
+
== TODO:
|
80
133
|
|
81
|
-
*
|
134
|
+
* the bridge from ruby to java, i.e. using rails logging for java libraries using slf4j, i.e. the java classes will log into the rails logging framework
|
135
|
+
* follow the naming of slf4j
|
136
|
+
* for the completeness: generators for jdk14, java-commons-logging, logback, log4r
|
137
|
+
* generators for slf4j should take advantage of ruby-maven and configure the jar in Gemfile as dependency
|
82
138
|
|
83
139
|
== LICENSE:
|
84
140
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Slf4r::Log4jGenerator < Rails::Generators::Base
|
2
|
+
#source_root File.expand_path('../templates', __FILE__)
|
3
|
+
|
4
|
+
def setup
|
5
|
+
source = File.expand_path('../../templates', __FILE__)
|
6
|
+
initializer "log4j.rb", File.read(File.join(source, "log4j.rb"))
|
7
|
+
initializer "log4j.properties", File.read(File.join(source, "log4j.properties"))
|
8
|
+
|
9
|
+
gemfile = File.read('Gemfile')
|
10
|
+
jar_line = "org.slf4j.slf4j-log4j12"
|
11
|
+
unless gemfile =~ /#{jar_line}/
|
12
|
+
File.open('Gemfile', 'a') do |f|
|
13
|
+
f.puts
|
14
|
+
f.puts "if defined? MAVEN"
|
15
|
+
f.puts " jar '#{jar_line}', '1.6.1'"
|
16
|
+
f.puts "end"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Slf4r::LoggingGenerator < Rails::Generators::Base
|
2
|
+
#source_root File.expand_path('../templates', __FILE__)
|
3
|
+
|
4
|
+
def setup
|
5
|
+
source = File.expand_path('../../templates', __FILE__)
|
6
|
+
initializer "logging.rb", File.read(File.join(source, "logging.rb"))
|
7
|
+
gem "logging"
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
log4j.rootCategory=debug, stdout, logfile
|
2
|
+
|
3
|
+
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
4
|
+
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
5
|
+
log4j.appender.stdout.layout.ConversionPattern=(%c) - %m%n
|
6
|
+
|
7
|
+
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
|
8
|
+
|
9
|
+
log4j.appender.logfile.MaxFileSize=100KB
|
10
|
+
# Keep one backup file
|
11
|
+
log4j.appender.logfile.MaxBackupIndex=1
|
12
|
+
|
13
|
+
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
|
14
|
+
log4j.appender.logfile.layout.ConversionPattern=%d %p (%c) - %m%n
|
@@ -0,0 +1,19 @@
|
|
1
|
+
if defined? JRUBY_VERSION
|
2
|
+
require 'slf4r/java_logger'
|
3
|
+
|
4
|
+
# load log4j configuration
|
5
|
+
props = java.util.Properties.new
|
6
|
+
props.load(java.io.FileInputStream.new(File.join(File.dirname(__FILE__), 'log4j.properties')))
|
7
|
+
|
8
|
+
# use rails default log file location
|
9
|
+
props.setProperty("log4j.appender.logfile.File", File.join(Rails.root, "log", "#{Rails.env}.log"))
|
10
|
+
|
11
|
+
# adjust the log level
|
12
|
+
root = props.getProperty("log4j.rootCategory")
|
13
|
+
props.setProperty("log4j.rootCategory", root.sub(/^[a-zA-Z]+/, Rails.application.config.log_level.to_s))
|
14
|
+
|
15
|
+
# configure log4j
|
16
|
+
org.apache.log4j.PropertyConfigurator.configure(props)
|
17
|
+
else
|
18
|
+
Rails.logger.debug("skip log4j config since no jruby is used")
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'slf4r/logger'
|
2
|
+
begin
|
3
|
+
# make sure we have java
|
4
|
+
require 'java'
|
5
|
+
begin
|
6
|
+
# make sure we have SLF4J in the classloader
|
7
|
+
import 'org.slf4j.LoggerFactory'
|
8
|
+
org.slf4j.LoggerFactory.getLogger("root")
|
9
|
+
|
10
|
+
require 'slf4r/java_logger'
|
11
|
+
puts "using slf4j logger"
|
12
|
+
rescue NameError
|
13
|
+
puts "no SLF4J found in classloader - using ruby logger"
|
14
|
+
require 'slf4r/ruby_logger'
|
15
|
+
end
|
16
|
+
rescue LoadError
|
17
|
+
puts "using ruby logger"
|
18
|
+
require 'slf4r/ruby_logger'
|
19
|
+
end
|
20
|
+
if defined?(Rails)
|
21
|
+
require 'slf4r/slf4r_railtie'
|
22
|
+
end
|
data/lib/slf4r/ruby_logger.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
class Slf4rRailtie < Rails::Railtie
|
2
|
+
|
3
|
+
# config.before_configuration do |app|
|
4
|
+
# app.config.class.class_eval do
|
5
|
+
# attr_accessor :slf4r
|
6
|
+
# end
|
7
|
+
# end
|
8
|
+
|
9
|
+
config.after_initialize do |app|
|
10
|
+
if defined?(Slf4r)
|
11
|
+
logger = (Rails.logger = setup_logger(Rails.logger, Rails))
|
12
|
+
app.config.logger = setup_logger(app.config.logger, Rails.application.class)
|
13
|
+
app.config.action_controller.logger = Slf4r::LoggerFacade.new(ActionController)
|
14
|
+
app.config.active_record.logger = Slf4r::LoggerFacade.new(ActiveRecord)
|
15
|
+
app.config.action_view.logger = Slf4r::LoggerFacade.new(ActionView)
|
16
|
+
app.config.action_mailer.logger = Slf4r::LoggerFacade.new(ActionMailer)
|
17
|
+
ActiveSupport::Cache::Store.logger = Slf4r::LoggerFacade.new(ActiveSupport::Cache::Store)
|
18
|
+
clazz = if logger.instance_variable_get(:@logger).respond_to?(:java_class)
|
19
|
+
logger.instance_variable_get(:@logger).java_class
|
20
|
+
else
|
21
|
+
logger.instance_variable_get(:@logger).class
|
22
|
+
end
|
23
|
+
logger.info("setup slf4r logger categories for #{clazz}")
|
24
|
+
else
|
25
|
+
require 'slf4r/wrapped_logger'
|
26
|
+
logger = (Slf4r::LoggerFacade4WrappedLogger.logger = Rails.logger)
|
27
|
+
logger.info("setup slf4r logger wrapper with #{logger.class}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def self.setup_logger(logger, category)
|
33
|
+
l = Slf4r::LoggerFacade.new(category)
|
34
|
+
real_logger = l.instance_variable_get(:@logger)
|
35
|
+
# adjust log level it the logger implementation allows it
|
36
|
+
if logger && real_logger.respond_to?(:level)
|
37
|
+
real_logger.level = logger.level
|
38
|
+
end
|
39
|
+
l
|
40
|
+
end
|
41
|
+
end
|
data/lib/slf4r/version.rb
CHANGED
data/lib/slf4r.rb
CHANGED
@@ -1,18 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# make sure we have java
|
4
|
-
require 'java'
|
5
|
-
begin
|
6
|
-
# make sure we have SLF4J in the classloader
|
7
|
-
import 'org.slf4j.LoggerFactory'
|
8
|
-
|
9
|
-
require 'slf4r/java_logger'
|
10
|
-
puts "using slf4j logger"
|
11
|
-
rescue NameError
|
12
|
-
puts "no SLF4J found in classloader - using ruby logger"
|
13
|
-
require 'slf4r/ruby_logger'
|
14
|
-
end
|
15
|
-
rescue LoadError
|
16
|
-
puts "using ruby logger"
|
17
|
-
require 'slf4r/ruby_logger'
|
1
|
+
if defined?(Rails)
|
2
|
+
require 'slf4r/slf4r_railtie'
|
18
3
|
end
|
data/spec/logger_helper.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require Pathname(__FILE__).dirname.expand_path + 'spec_helper'
|
3
|
-
|
4
|
-
|
3
|
+
module Slf4r
|
4
|
+
def flush(klass)
|
5
|
+
remove_const(klass.to_sym) if const_defined? klass.to_sym
|
6
|
+
end
|
5
7
|
end
|
6
8
|
|
7
9
|
def behave_as_logger(logger)
|
data/spec/wrapper_logger_spec.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Meier
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-12-11 00:00:00 +05:30
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -27,8 +27,8 @@ dependencies:
|
|
27
27
|
segments:
|
28
28
|
- 1
|
29
29
|
- 3
|
30
|
-
-
|
31
|
-
version: 1.3.
|
30
|
+
- 1
|
31
|
+
version: 1.3.1
|
32
32
|
type: :development
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
@@ -59,6 +59,34 @@ dependencies:
|
|
59
59
|
version: 1.1.7
|
60
60
|
type: :development
|
61
61
|
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: cucumber
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
- 9
|
72
|
+
- 4
|
73
|
+
version: 0.9.4
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: rails
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 3
|
85
|
+
- 0
|
86
|
+
- 1
|
87
|
+
version: 3.0.1
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
62
90
|
description: Slf4r provides a uniform interface for instantiating und using of a logger
|
63
91
|
email:
|
64
92
|
- m.kristian@web.de
|
@@ -74,27 +102,35 @@ files:
|
|
74
102
|
- History.txt
|
75
103
|
- README.txt
|
76
104
|
- Rakefile
|
77
|
-
- lib/logging_adapter.rb
|
78
105
|
- lib/slf4r.rb
|
79
|
-
- lib/
|
106
|
+
- lib/logging_adapter.rb
|
80
107
|
- lib/ruby_logger_adapter.rb
|
81
|
-
- lib/
|
82
|
-
- lib/slf4r/
|
108
|
+
- lib/log4r_adapter.rb
|
109
|
+
- lib/generators/slf4r/logging/logging_generator.rb
|
110
|
+
- lib/generators/slf4r/logging/USAGE
|
111
|
+
- lib/generators/slf4r/templates/log4j.properties
|
112
|
+
- lib/generators/slf4r/templates/log4j.rb
|
113
|
+
- lib/generators/slf4r/templates/logging.rb
|
114
|
+
- lib/generators/slf4r/log4j/log4j_generator.rb
|
115
|
+
- lib/generators/slf4r/log4j/USAGE
|
116
|
+
- lib/slf4r/version.rb
|
83
117
|
- lib/slf4r/abstract_logger_facade.rb
|
84
|
-
- lib/slf4r/logging_logger.rb
|
85
118
|
- lib/slf4r/log4r_logger.rb
|
119
|
+
- lib/slf4r/logger.rb
|
120
|
+
- lib/slf4r/ruby_logger.rb
|
86
121
|
- lib/slf4r/wrapped_logger.rb
|
87
|
-
- lib/slf4r/
|
122
|
+
- lib/slf4r/init_slf4j.rb
|
123
|
+
- lib/slf4r/noop_logger.rb
|
124
|
+
- lib/slf4r/logging_logger.rb
|
125
|
+
- lib/slf4r/slf4r_railtie.rb
|
88
126
|
- lib/slf4r/java_logger.rb
|
89
|
-
- lib/slf4r/ruby_logger.rb
|
90
|
-
- lib/slf4r/version.rb
|
91
|
-
- spec/logger_helper.rb
|
92
127
|
- spec/spec_helper.rb
|
93
|
-
- spec/ruby_logger_spec.rb
|
94
128
|
- spec/wrapper_logger_spec.rb
|
95
|
-
- spec/spec.opts
|
96
129
|
- spec/logging_logger_spec.rb
|
130
|
+
- spec/spec.opts
|
131
|
+
- spec/ruby_logger_spec.rb
|
97
132
|
- spec/log4r_logger_spec.rb
|
133
|
+
- spec/logger_helper.rb
|
98
134
|
has_rdoc: true
|
99
135
|
homepage: http://github.com/mkristian/slf4r
|
100
136
|
licenses:
|
@@ -127,7 +163,7 @@ signing_key:
|
|
127
163
|
specification_version: 3
|
128
164
|
summary: Slf4r
|
129
165
|
test_files:
|
130
|
-
- spec/ruby_logger_spec.rb
|
131
166
|
- spec/wrapper_logger_spec.rb
|
132
167
|
- spec/logging_logger_spec.rb
|
168
|
+
- spec/ruby_logger_spec.rb
|
133
169
|
- spec/log4r_logger_spec.rb
|
data/lib/slf4r/version.rb.errors
DELETED
File without changes
|