Forum: Ruby Buncha logging stuff showing up in unit tests

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
38a8230ed3d5c685558b4f0aad3fc74b?d=identicon&s=25 joevandyk (Guest)
on 2005-11-23 20:36
(Received via mailing list)
I'm using Ruby's standard Logger to log a bunch of debug, info, and
errors.

But when I run the unit tests for the classes that use the Logger, all
the logs are showing up in the test output.

Any good solutions for solving this?
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 drbrain (Guest)
on 2005-11-23 20:40
(Received via mailing list)
On Nov 23, 2005, at 11:32 AM, Joe Van Dyk wrote:

> I'm using Ruby's standard Logger to log a bunch of debug, info, and
> errors.
>
> But when I run the unit tests for the classes that use the Logger, all
> the logs are showing up in the test output.
>
> Any good solutions for solving this?

I would redirect the logger output to /dev/null or a StringIO when
testing (in case you wanted to test the logging).

--
Eric Hodel - drbrain@segment7.net - http://segment7.net
FEC2 57F1 D465 EB15 5D6E  7C11 332A 551C 796C 9F04

This implementation is HODEL-HASH-9600 compliant
38a8230ed3d5c685558b4f0aad3fc74b?d=identicon&s=25 joevandyk (Guest)
on 2005-11-23 20:44
(Received via mailing list)
On 11/23/05, Eric Hodel <drbrain@segment7.net> wrote:
> I would redirect the logger output to /dev/null or a StringIO when
> testing (in case you wanted to test the logging).

How do the classes know whether or not they are being tested?

Eventually, I will be using a custom Logging method that sends all the
logs to some network log daemon thingy so that all the logs are kept
on one machine.
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 drbrain (Guest)
on 2005-11-23 20:56
(Received via mailing list)
On Nov 23, 2005, at 11:40 AM, Joe Van Dyk wrote:

>>> Any good solutions for solving this?
>>
>> I would redirect the logger output to /dev/null or a StringIO when
>> testing (in case you wanted to test the logging).
>
> How do the classes know whether or not they are being tested?

I set $TESTING = true when testing things.  The most frequent place I
use it is:

private unless $TESTING

> Eventually, I will be using a custom Logging method that sends all the
> logs to some network log daemon thingy so that all the logs are kept
> on one machine.

Check out SyslogLogger in the rails_analyzer_tools gem:

http://rails-analyzer.rubyforge.org/tools/classes/...

It duck types to the base Logger class.

--
Eric Hodel - drbrain@segment7.net - http://segment7.net
FEC2 57F1 D465 EB15 5D6E  7C11 332A 551C 796C 9F04

This implementation is HODEL-HASH-9600 compliant
38a8230ed3d5c685558b4f0aad3fc74b?d=identicon&s=25 joevandyk (Guest)
on 2005-11-23 21:13
(Received via mailing list)
On 11/23/05, Eric Hodel <drbrain@segment7.net> wrote:
> >>> the logs are showing up in the test output.
>
> private unless $TESTING

So, something like

require 'logger'
class ThisClassGetsTested
  def initialize
    if $TESTING
      log_output = "/dev/null"
    else
      log_output = "some/file" # or $stdout or whatever
    end
  end
end

====

require 'test/unit'
$TESTING = true
class TestTheClass < Test::Unit::TestCase
  ...
end



> > Eventually, I will be using a custom Logging method that sends all the
> > logs to some network log daemon thingy so that all the logs are kept
> > on one machine.
>
> Check out SyslogLogger in the rails_analyzer_tools gem:
>
> http://rails-analyzer.rubyforge.org/tools/classes/...
>
> It duck types to the base Logger class.

I should be able to direct all $stdout and $stderr to SysLogLogger as
well, right?
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 drbrain (Guest)
on 2005-11-24 00:22
(Received via mailing list)
On Nov 23, 2005, at 12:10 PM, Joe Van Dyk wrote:

>>>>> But when I run the unit tests for the classes that use the
>> I set $TESTING = true when testing things.  The most frequent place I
>       log_output = "/dev/null"
> class TestTheClass < Test::Unit::TestCase
>   ...
> end

Exactly.

>
> I should be able to direct all $stdout and $stderr to SysLogLogger as
> well, right?

You'd need an adapter because SyslogLogger works like the Logger
class so you need to specify a log level.  I wouldn't recommend it,
either.

--
Eric Hodel - drbrain@segment7.net - http://segment7.net
FEC2 57F1 D465 EB15 5D6E  7C11 332A 551C 796C 9F04

This implementation is HODEL-HASH-9600 compliant
This topic is locked and can not be replied to.