Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Logger for class method from an included module

Reply
Thread Tools

Logger for class method from an included module

 
 
Iain Barnett
Guest
Posts: n/a
 
      03-28-2011
Hi,

I want to log what's happening when a class method is called, using a =
Logger instance. The code resembles this:=20

=20
module Helpers
def self.included(klass)
klass.extend ClassMethods
end
=20
module ClassMethods
=20
def my_classy_method( arg1, arg2 )
#I want to log in here
...
end

end#ClassMethods

end#Helpers


class User
=20
include Helpers

#boring stuff...

end


#called as such
User.my_classy_method( "blah", "plop" )


I've no idea where I should send the logger instance to that I've =
already set up in the rest of the app. Would someone be good enough to =
enlighten me? Should I perhaps alter the method signature to send the =
logger in as an argument on the end like this:

def my_classy_method( arg1, arg2, options=3D{} )
options[:logger].debug ...

User.my_classy_method( "blah", "plop", {logger: @logger} )

or would that be bad form?

Any help on the matter is much appreciated.


Regards,
Iain=

 
Reply With Quote
 
 
 
 
Tim Pease
Guest
Posts: n/a
 
      03-28-2011

On Mar 28, 2011, at 1:16 PM, Iain Barnett wrote:

> Hi,
>=20
> I want to log what's happening when a class method is called, using a =

Logger instance. The code resembles this:=20

<snip>

> I've no idea where I should send the logger instance to that I've =

already set up in the rest of the app. Would someone be good enough to =
enlighten me? Should I perhaps alter the method signature to send the =
logger in as an argument on the end like this:
>=20
> def my_classy_method( arg1, arg2, options=3D{} )
> options[:logger].debug ...
>=20
> User.my_classy_method( "blah", "plop", {logger: @logger} )
>=20
> or would that be bad form?
>=20
> Any help on the matter is much appreciated.
>=20


Since you want to reference a single Logger instance globally, perhaps a =
global variable might be useful?

$app_logger =3D Logger.new( ... )

If global variables turn your stomach, you could create an application =
level module that contains your logger and/or other common objects.

module MyApp
extend self

def logger
@logger ||=3D Logger.new( ... )
end
end

And now from anywhere in your code you can get the global logger thus

MyApp.logger

Another option to consider is the "logging" gem =
<https://github.com/TwP/logging>. The advantages of the logging gem are =
the ability to give each class it's own logger and still send all log =
events to the same destination (stdout, file, syslog, or any =
combination). You can then tweak the log level on a class by class =
basis. You can set the log level for one class to "debug" and keep all =
the others at "info" or "warn". This is great when you only need to =
debug a small subset of your application.

Blessings,
TwP


 
Reply With Quote
 
 
 
 
Iain Barnett
Guest
Posts: n/a
 
      03-31-2011

On 28 Mar 2011, at 23:07, Tim Pease wrote:
>=20
> Since you want to reference a single Logger instance globally, perhaps =

a global variable might be useful?
>=20
> $app_logger =3D Logger.new( ... )
>=20
> If global variables turn your stomach,


I think the general ire against global vars prevented my head from =
considering this

> you could create an application level module that contains your logger =

and/or other common objects.
>=20
> module MyApp
> extend self
>=20
> def logger
> @logger ||=3D Logger.new( ... )
> end
> end
>=20
> And now from anywhere in your code you can get the global logger thus
>=20
> MyApp.logger


I can see I start using this in code a lot, not just for loggers, and =
probably inappropriately, but there you go.


>=20
> Another option to consider is the "logging" gem =

<https://github.com/TwP/logging>. The advantages of the logging gem are =
the ability to give each class it's own logger and still send all log =
events to the same destination (stdout, file, syslog, or any =
combination). You can then tweak the log level on a class by class =
basis. You can set the log level for one class to "debug" and keep all =
the others at "info" or "warn". This is great when you only need to =
debug a small subset of your application.

I've downloaded it and am giving it a whirl now! Thanks.

Regards,
Iain=

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Including a module in an included module. Prince Nez Ruby 3 08-18-2009 11:46 AM
Ruby's Logger vs ActiveRecord: no more Logger data output Georges Ko Ruby 4 07-26-2006 01:38 PM
why do i need to use org/apache/avalon/framework/logger/Logger to convert XSL-FO to PDF?? sachin XML 1 02-03-2006 09:58 PM
ruby's Logger conflict with Log4r's Logger cap Ruby 3 12-11-2005 03:44 PM
Adding class method through included module? ivdkleyn@gmail.com Ruby 4 02-23-2005 09:01 AM



Advertisments