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.
joevandyk (Guest)
on 2005-11-23 21: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?
drbrain (Guest)
on 2005-11-23 21:40
(Received via mailing list)
On Nov 23, 2005, at 11:32 AM, Joe Van D. 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 H. - removed_email_address@domain.invalid - http://segment7.net
FEC2 57F1 D465 EB15 5D6E  7C11 332A 551C 796C 9F04

This implementation is HODEL-HASH-9600 compliant
joevandyk (Guest)
on 2005-11-23 21:44
(Received via mailing list)
On 11/23/05, Eric H. <removed_email_address@domain.invalid> 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.
drbrain (Guest)
on 2005-11-23 21:56
(Received via mailing list)
On Nov 23, 2005, at 11:40 AM, Joe Van D. 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 H. - removed_email_address@domain.invalid - http://segment7.net
FEC2 57F1 D465 EB15 5D6E  7C11 332A 551C 796C 9F04

This implementation is HODEL-HASH-9600 compliant
joevandyk (Guest)
on 2005-11-23 22:13
(Received via mailing list)
On 11/23/05, Eric H. <removed_email_address@domain.invalid> 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?
drbrain (Guest)
on 2005-11-24 01:22
(Received via mailing list)
On Nov 23, 2005, at 12:10 PM, Joe Van D. 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 H. - removed_email_address@domain.invalid - 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.