From: Eric Hodel Date: 2005-11-24T08:19:42+09:00 Subject: Re: Buncha logging stuff showing up in unit tests On Nov 23, 2005, at 12:10 PM, Joe Van Dyk wrote: > On 11/23/05, Eric Hodel wrote: >> On Nov 23, 2005, at 11:40 AM, Joe Van Dyk wrote: >> >>> On 11/23/05, Eric Hodel 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 Exactly. >>> 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? 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