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?