db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michelle Caisse <Michelle.Cai...@Sun.COM>
Subject Re: Patch for JIRA JDO-33
Date Mon, 13 Jun 2005 16:13:42 GMT
Hi Michael,

Is it possible to get the run time output to the log also?  It's good to 
know what impact our fixes have on test run performance.

-- Michelle

Michael Watzek wrote:

> Hi,
>
> JIRA JDO-33 suggests to print the TCK output to a log file in addition 
> to standard out. The attached patch solves this issue.
>
> The log file is created in directory "target/logs". If this directory 
> does not exist at the time the TCK is started, then it is created. The 
> file name pattern for the log file is "TCKLog-<currentDate>.txt". The 
> format of <currentDate> is "yyyyMMdd-HHmmss".
>
> You can switch off printing to a log file if you set the system 
> property "noLogFile" to "true". In this case you'll only have console 
> output. Otherwise, System.out and System.err are redirected to a log 
> file and to the console.
>
> Because the patch redirects the console output, you'll see also 
> logging output in the log file. For this reason, we decided not to log 
> exceptions in case of failures and/or errors using fatal/error log 
> level. Instead, those exceptions are logged using level info. Thus, if 
> you want to see exceptions at once with the test result, then please 
> set the log level of the TCK to info. By default, it is set to error 
> and you see exceptions only at the end of the TCK output after the 
> output of all tests.
>
> Regards,
> Michael
>
>------------------------------------------------------------------------
>
>Index: test/java/org/apache/jdo/tck/JDO_Test.java
>===================================================================
>--- test/java/org/apache/jdo/tck/JDO_Test.java	(revision 189748)
>+++ test/java/org/apache/jdo/tck/JDO_Test.java	(working copy)
>@@ -182,11 +182,13 @@
>             testSucceeded = true;
>         }
>         catch (AssertionFailedError e) {
>-            logger.error("Exception during setUp or runtest: ", e);
>+            if (logger.isInfoEnabled())
>+                logger.info("Exception during setUp or runtest: ", e);
>             throw e;
>         }
>         catch (Throwable t) {
>-            logger.fatal("Exception during setUp or runtest: ", t);
>+            if (logger.isInfoEnabled())
>+                logger.info("Exception during setUp or runtest: ", t);
>             throw t;
>         }
>         finally {
>@@ -204,7 +206,8 @@
>      */
>     private void setTearDownThrowable(String context, Throwable throwable)
>     {
>-        logger.fatal("Exception during "+context+": ", throwable);
>+        if (logger.isInfoEnabled())
>+            logger.info("Exception during "+context+": ", throwable);
>         if (this.tearDownThrowable == null) {
>             this.tearDownThrowable = throwable;
>         }
>Index: test/java/org/apache/jdo/tck/util/BatchTestRunner.java
>===================================================================
>--- test/java/org/apache/jdo/tck/util/BatchTestRunner.java	(revision 189748)
>+++ test/java/org/apache/jdo/tck/util/BatchTestRunner.java	(working copy)
>@@ -16,10 +16,17 @@
> 
> package org.apache.jdo.tck.util;
> 
>+import java.io.File;
>+import java.io.FileNotFoundException;
>+import java.io.FileOutputStream;
>+import java.io.IOException;
>+import java.io.OutputStream;
>+import java.io.PrintStream;
> import java.lang.reflect.Constructor;
> import java.lang.reflect.InvocationTargetException;
>-import java.io.PrintStream;
>+import java.text.SimpleDateFormat;
> import java.util.Arrays;
>+import java.util.Date;
> 
> import junit.framework.Test;
> import junit.framework.TestResult;
>@@ -47,7 +54,16 @@
>     
>     /** Default of the system property ResultPrinterClass. */
>     public static final String RESULTPRINTER_DEFAULT = BatchResultPrinter.class.getName();
>-    
>+
>+    /** Redirect System.out and System.err to an ConsoleFileOutput instance. */
>+    static {
>+        if (!Boolean.getBoolean("noLogFile")) {
>+            PrintStream printStream = new PrintStream(new ConsoleFileOutput());
>+            System.setErr(printStream);
>+            System.setOut(printStream);
>+        }
>+    }
>+
>     /** 
>      * Constructor. 
>      * It creates a result printer instance based on the system property
>@@ -172,4 +188,53 @@
>     protected ResultPrinter getDefaultResultPrinter() {
>         return new BatchResultPrinter(System.out);
>     }
>+    
>+    private static class ConsoleFileOutput extends OutputStream {
>+
>+        private static String outDir = "logs";
>+        private static String fileNamePrefix = "TCKLog-";
>+        private static String fileNameSuffix = ".txt";
>+        private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
>+            
>+        private PrintStream systemOut = System.out;
>+        private FileOutputStream fileOut;
>+        
>+        private ConsoleFileOutput() {
>+            String fileName = fileNamePrefix+simpleDateFormat.format(new Date())+fileNameSuffix;
>+            File dir = new File(outDir);
>+            if (!dir.exists()) {
>+                dir.mkdir();
>+            }
>+            
>+            try {
>+                fileOut = new FileOutputStream(new File(dir, fileName));
>+            } catch (FileNotFoundException e) {
>+                System.err.println("Cannot create log file "+fileName+". "+e);
>+            }
>+        }
>+        
>+        /* 
>+         * @see java.io.OutputStream#write(int)
>+         */
>+        public void write(int b) throws IOException {
>+            this.systemOut.write(b);
>+            this.fileOut.write(b);
>+        }
>+        
>+        /**
>+         * @see java.io.OutputStream#close()
>+         */
>+        public void close()  throws IOException {
>+            this.fileOut.close();
>+            this.systemOut.close();
>+        }
>+    
>+        /**
>+         * @see java.io.OutputStream#flush()
>+         */
>+        public void flush()  throws IOException {
>+            this.systemOut.flush();
>+            this.fileOut.flush();
>+        }        
>+    }
> }
>  
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message