On 11/23/05, Eric Hodel <drbrain / segment7.net> wrote:
> On Nov 23, 2005, at 11:40 AM, Joe Van Dyk wrote:
>
> > On 11/23/05, Eric Hodel <drbrain / segment7.net> wrote:
> >> 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).
> >
> > 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

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/SyslogLogger.html
>
> It duck types to the base Logger class.

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