You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by bf...@apache.org on 2012/03/19 19:41:31 UTC

svn commit: r1302593 - in /oodt/trunk/pge/src: main/java/org/apache/oodt/cas/pge/ main/java/org/apache/oodt/cas/pge/logging/ main/java/org/apache/oodt/cas/pge/metadata/ test/org/apache/oodt/cas/pge/ test/org/apache/oodt/cas/pge/logging/

Author: bfoster
Date: Mon Mar 19 18:41:31 2012
New Revision: 1302593

URL: http://svn.apache.org/viewvc?rev=1302593&view=rev
Log:
Port LoggerOutputStream in CAS-PGE to existing LoggerOutputStream in oodt-commons io package

---------------
OODT-423

Removed:
    oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/logging/
    oodt/trunk/pge/src/test/org/apache/oodt/cas/pge/logging/
Modified:
    oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
    oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/metadata/PgeTaskMetKeys.java
    oodt/trunk/pge/src/test/org/apache/oodt/cas/pge/TestPGETaskInstance.java

Modified: oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
URL: http://svn.apache.org/viewvc/oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java?rev=1302593&r1=1302592&r2=1302593&view=diff
==============================================================================
--- oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java (original)
+++ oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java Mon Mar 19 18:41:31 2012
@@ -25,6 +25,7 @@ import static org.apache.oodt.cas.pge.me
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.DUMP_METADATA;
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.INGEST_CLIENT_TRANSFER_SERVICE_FACTORY;
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.INGEST_FILE_MANAGER_URL;
+import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.LOG_FILENAME_PATTERN;
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.MET_FILE_EXT;
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.NAME;
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.PGE_CONFIG_BUILDER;
@@ -40,15 +41,14 @@ import static org.apache.oodt.cas.pge.me
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.OutputStream;
 import java.net.URL;
-import java.nio.CharBuffer;
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.logging.Handler;
+import java.util.logging.FileHandler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
 import java.util.regex.Pattern;
 
 //Apache imports
@@ -68,8 +68,6 @@ import org.apache.oodt.cas.pge.config.Pg
 import org.apache.oodt.cas.pge.config.RegExprOutputFiles;
 import org.apache.oodt.cas.pge.config.RenamingConv;
 import org.apache.oodt.cas.pge.config.XmlFilePgeConfigBuilder;
-import org.apache.oodt.cas.pge.logging.PgeLogHandler;
-import org.apache.oodt.cas.pge.logging.PgeLogRecord;
 import org.apache.oodt.cas.pge.metadata.PgeMetadata;
 import org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys;
 import org.apache.oodt.cas.pge.writers.PcsMetFileWriter;
@@ -98,11 +96,11 @@ import com.google.common.collect.Lists;
  */
 public class PGETaskInstance implements WorkflowTaskInstance {
 
+   protected Logger logger;
    protected XmlRpcWorkflowManagerClient wm;
    protected String workflowInstId;
    protected PgeMetadata pgeMetadata;
    protected PgeConfig pgeConfig;
-   protected Handler logHandler;
 
    protected PGETaskInstance() {}
 
@@ -115,9 +113,7 @@ public class PGETaskInstance implements 
          runPropertyAdders();
          wm = createWorkflowManagerClient();
          workflowInstId = getWorkflowInstanceId();
-
-         // Initialize Logger.
-         initializePgeLogger();
+         logger = createLogger();
 
          // Write out PgeMetadata.
          dumpMetadataIfRequested();
@@ -140,52 +136,45 @@ public class PGETaskInstance implements 
          // Commit dynamic metadata.
          updateDynamicMetadata();
       } catch (Exception e) {
-         log(Level.SEVERE, "PGETask FAILED!!! : " + e.getMessage(), e);
+         logger.log(Level.SEVERE, "PGETask FAILED!!! : " + e.getMessage(), e);
          throw new WorkflowTaskInstanceException("PGETask FAILED!!! : "
                + e.getMessage(), e);
-      } finally {
-         try { closePgeLogger(); } catch (Exception e) {}
       }
    }
 
    protected void updateStatus(String status) throws Exception {
-      log(Level.INFO, "Updating status to workflow as [" + status + "]");
+      logger.log(Level.INFO, "Updating status to workflow as [" + status + "]");
       wm.updateWorkflowInstanceStatus(workflowInstId, status);
    }
 
-   protected void initializePgeLogger() throws Exception {
+   protected Logger createLogger() throws Exception {
       File logDir = new File(pgeConfig.getExeDir(), "logs");
       if (!(logDir.exists() || logDir.mkdirs())) {
          throw new Exception("mkdirs for logs directory return false");
       }
-      logHandler = new PgeLogHandler(workflowInstId,
-            new FileOutputStream(new File(logDir, createLogFileName())));
-      Logger.getLogger(PGETaskInstance.class.getName()).addHandler(logHandler);
+
+      Logger logger = Logger.getLogger(PGETaskInstance.class.getName()
+            + "." + workflowInstId);
+      FileHandler handler = new FileHandler(
+            new File(logDir, createLogFileName()).getAbsolutePath());
+      handler.setFormatter(new SimpleFormatter());
+      logger.addHandler(handler);
+      return logger;
    }
 
    protected String createLogFileName() throws Exception {
-      return pgeMetadata.getMetadata(NAME) + "." + System.currentTimeMillis()
+      String filenamePattern = pgeMetadata.getMetadata(LOG_FILENAME_PATTERN);
+      if (filenamePattern != null) {
+         return filenamePattern;
+      } else {
+         return pgeMetadata.getMetadata(NAME) + "." + System.currentTimeMillis()
             + ".log";
-   }
-
-   protected void closePgeLogger() throws Exception {
-      logHandler.close();
-      Logger.getLogger(PGETaskInstance.class.getName()).removeHandler(logHandler);
-   }
-
-   protected void log(Level level, String message) {
-      Logger.getLogger(PGETaskInstance.class.getName()).log(
-            new PgeLogRecord(workflowInstId, level, message));
-   }
-
-   protected void log(Level level, String message, Throwable t) {
-      Logger.getLogger(PGETaskInstance.class.getName()).log(
-            new PgeLogRecord(workflowInstId, level, message, t));
+      }
    }
 
    protected PgeMetadata createPgeMetadata(Metadata dynMetadata,
          WorkflowTaskConfiguration config) throws Exception {
-      log(Level.INFO,
+      logger.log(Level.INFO,
             "Converting workflow configuration to static metadata...");
       Metadata staticMetadata = new Metadata();
       for (Object objKey : config.getProperties().keySet()) {
@@ -196,19 +185,19 @@ public class PGETaskInstance implements 
                   Splitter.on(",").trimResults()
                   .omitEmptyStrings()
                   .split(config.getProperty(key)));
-            log(Level.FINEST, "Adding static metadata: key = [" + key
+            logger.log(Level.FINEST, "Adding static metadata: key = [" + key
                   + "] value = " + values);
             staticMetadata.addMetadata(key, values);
          } else {
             String value = config.getProperty(key);
-            log(Level.FINEST, "Adding static metadata: key = [" + key
+            logger.log(Level.FINEST, "Adding static metadata: key = [" + key
                   + "] value = [" + value + "]");
             staticMetadata.addMetadata(key, value);
          }
       }
-      log(Level.INFO, "Loading workflow context metadata...");
+      logger.log(Level.INFO, "Loading workflow context metadata...");
       for (String key : dynMetadata.getAllKeys()) {
-         log(Level.FINEST,
+         logger.log(Level.FINEST,
                "Adding dynamic metadata: key = [" + key + "] value = "
                      + dynMetadata.getAllMetadata(key));
       }
@@ -216,15 +205,15 @@ public class PGETaskInstance implements 
    }
 
    protected PgeConfig createPgeConfig() throws Exception {
-      log(Level.INFO, "Create PgeConfig...");
+      logger.log(Level.INFO, "Create PgeConfig...");
       String pgeConfigBuilderClass = pgeMetadata
             .getMetadata(PGE_CONFIG_BUILDER);
       if (pgeConfigBuilderClass != null) {
-         log(Level.INFO, "Using PgeConfigBuilder: " + pgeConfigBuilderClass);
+         logger.log(Level.INFO, "Using PgeConfigBuilder: " + pgeConfigBuilderClass);
          return ((PgeConfigBuilder) Class.forName(pgeConfigBuilderClass)
                .newInstance()).build(pgeMetadata);
       } else {
-         log(Level.INFO, "Using default PgeConfigBuilder: "
+         logger.log(Level.INFO, "Using default PgeConfigBuilder: "
                + XmlFilePgeConfigBuilder.class.getCanonicalName());
          return new XmlFilePgeConfigBuilder().build(pgeMetadata);
       }
@@ -232,7 +221,7 @@ public class PGETaskInstance implements 
 
    protected void runPropertyAdders() throws Exception {
       try {
-         log(Level.INFO, "Loading/Running property adders...");
+         logger.log(Level.INFO, "Loading/Running property adders...");
          List<String> propertyAdders = pgeMetadata
                .getAllMetadata(PROPERTY_ADDERS);
          if (propertyAdders != null) {
@@ -240,7 +229,7 @@ public class PGETaskInstance implements 
                runPropertyAdder(loadPropertyAdder(propertyAdder));
             }
          } else {
-            log(Level.INFO, "No property adders specified");
+            logger.log(Level.INFO, "No property adders specified");
          }
       } catch (Exception e) {
          throw new Exception("Failed to instanciate/run Property Adders : "
@@ -250,14 +239,14 @@ public class PGETaskInstance implements 
 
    protected ConfigFilePropertyAdder loadPropertyAdder(
          String propertyAdderClasspath) throws Exception {
-      log(Level.FINE, "Loading property adder: " + propertyAdderClasspath);
+      logger.log(Level.FINE, "Loading property adder: " + propertyAdderClasspath);
       return (ConfigFilePropertyAdder) Class.forName(propertyAdderClasspath)
             .newInstance();
    }
 
    protected void runPropertyAdder(ConfigFilePropertyAdder propAdder)
          throws Exception {
-      log(Level.INFO, "Running property adder: "
+      logger.log(Level.INFO, "Running property adder: "
             + propAdder.getClass().getCanonicalName());
       propAdder.addConfigProperties(pgeMetadata,
             pgeConfig.getPropertyAdderCustomArgs());
@@ -266,14 +255,14 @@ public class PGETaskInstance implements 
    protected XmlRpcWorkflowManagerClient createWorkflowManagerClient()
          throws Exception {
       String url = pgeMetadata.getMetadata(WORKFLOW_MANAGER_URL);
-      log(Level.INFO, "Creating WorkflowManager client for url [" + url + "]");
+      logger.log(Level.INFO, "Creating WorkflowManager client for url [" + url + "]");
       Validate.notNull(url, "Must specify " + WORKFLOW_MANAGER_URL);
       return new XmlRpcWorkflowManagerClient(new URL(url));
    }
 
    protected String getWorkflowInstanceId() throws Exception {
       String instanceId = pgeMetadata.getMetadata(CoreMetKeys.WORKFLOW_INST_ID);
-      log(Level.INFO, "Workflow instanceId is [" + instanceId + "]");
+      logger.log(Level.INFO, "Workflow instanceId is [" + instanceId + "]");
       Validate.notNull(instanceId, "Must specify "
             + CoreMetKeys.WORKFLOW_INST_ID);
       return instanceId;
@@ -298,7 +287,7 @@ public class PGETaskInstance implements 
    }
 
    protected void createExeDir() throws Exception {
-      log(Level.INFO, "Creating PGE execution working directory: ["
+      logger.log(Level.INFO, "Creating PGE execution working directory: ["
             + pgeConfig.getExeDir() + "]");
       File executionDir = new File(pgeConfig.getExeDir());
       if (!(executionDir.exists() || executionDir.mkdirs())) {
@@ -310,7 +299,7 @@ public class PGETaskInstance implements 
    protected void createOuputDirsIfRequested() throws Exception {
       for (OutputDir outputDir : pgeConfig.getOuputDirs()) {
          if (outputDir.isCreateBeforeExe()) {
-            log(Level.INFO, "Creating PGE file ouput directory: ["
+            logger.log(Level.INFO, "Creating PGE file ouput directory: ["
                   + outputDir.getPath() + "]");
             File dir = new File(outputDir.getPath());
             if (!(dir.exists() || dir.mkdirs())) {
@@ -322,18 +311,18 @@ public class PGETaskInstance implements 
    }
 
    protected void createSciPgeConfigFiles() throws Exception {
-      log(Level.INFO, "Starting creation of science PGE files...");
+      logger.log(Level.INFO, "Starting creation of science PGE files...");
       for (DynamicConfigFile dynamicConfigFile : pgeConfig
             .getDynamicConfigFiles()) {
          createSciPgeConfigFile(dynamicConfigFile);
       }
-      log(Level.INFO, "Successfully wrote all science PGE files!");
+      logger.log(Level.INFO, "Successfully wrote all science PGE files!");
    }
 
    protected void createSciPgeConfigFile(DynamicConfigFile dynamicConfigFile)
          throws Exception {
       Validate.notNull(dynamicConfigFile, "dynamicConfigFile cannot be null");
-      log(Level.FINE, "Starting creation of science PGE file ["
+      logger.log(Level.FINE, "Starting creation of science PGE file ["
             + dynamicConfigFile.getFilePath() + "]...");
 
       // Create parent directory if it doesn't exist.
@@ -345,14 +334,14 @@ public class PGETaskInstance implements 
       }
 
       // Load writer and write file.
-      log(Level.FINE, "Loading writer class for science PGE file ["
+      logger.log(Level.FINE, "Loading writer class for science PGE file ["
             + dynamicConfigFile.getFilePath() + "]...");
       SciPgeConfigFileWriter writer = (SciPgeConfigFileWriter) Class.forName(
             dynamicConfigFile.getWriterClass()).newInstance();
-      log(Level.FINE, "Loaded writer [" + writer.getClass().getCanonicalName()
+      logger.log(Level.FINE, "Loaded writer [" + writer.getClass().getCanonicalName()
             + "] for science PGE file [" + dynamicConfigFile.getFilePath()
             + "]...");
-      log(Level.INFO,
+      logger.log(Level.INFO,
             "Writing science PGE file [" + dynamicConfigFile.getFilePath()
                   + "]...");
       File configFile = writer.createConfigFile(dynamicConfigFile.getFilePath(),
@@ -364,17 +353,17 @@ public class PGETaskInstance implements 
    }
 
    protected void generateMetadataForProducts() throws Exception {
-      log(Level.INFO, "Generating metadata for products...");
+      logger.log(Level.INFO, "Generating metadata for products...");
       for (OutputDir outputDir : pgeConfig.getOuputDirs()) {
 
-         log(Level.FINE, "Looking for products in output directory ["
+         logger.log(Level.FINE, "Looking for products in output directory ["
                + outputDir.getPath() + "]");
 
          File[] createdFiles = new File(outputDir.getPath()).listFiles();
-         log(Level.FINE, "Found files: " + Lists.newArrayList(createdFiles));
+         logger.log(Level.FINE, "Found files: " + Lists.newArrayList(createdFiles));
 
          for (File createdFile : createdFiles) {
-            log(Level.FINE, "Inspecting file [" + createdFile + "]");
+            logger.log(Level.FINE, "Inspecting file [" + createdFile + "]");
             List<RegExprOutputFiles> regexRules = findMatchingRegexRules(
                   createdFile, outputDir);
             if (!regexRules.isEmpty()) {
@@ -390,7 +379,7 @@ public class PGETaskInstance implements 
                writeMetadataFile(productMetadata, createdFile.getAbsolutePath()
                      + "." + pgeMetadata.getMetadata(MET_FILE_EXT));
             } else {
-               log(Level.FINE, "Ignoring file [" + createdFile
+               logger.log(Level.FINE, "Ignoring file [" + createdFile
                      + "] because it doesn't matches any product regex rules"
                      + " for this directory [" + outputDir.getPath() + "]");
             }
@@ -400,13 +389,13 @@ public class PGETaskInstance implements 
 
    protected List<RegExprOutputFiles> findMatchingRegexRules(File file,
          OutputDir outputDir) throws Exception {
-      log(Level.FINE, "Checking file [" + file
+      logger.log(Level.FINE, "Checking file [" + file
             + "] against regex rules for output directory ["
             + outputDir.getPath() + "]");
       List<RegExprOutputFiles> regexRules = Lists.newArrayList();
       for (RegExprOutputFiles regExprFiles : outputDir.getRegExprOutputFiles()) {
          if (Pattern.matches(regExprFiles.getRegExp(), file.getName())) {
-            log(Level.FINE, "File [" + file + "] matched regex rule ["
+            logger.log(Level.FINE, "File [" + file + "] matched regex rule ["
                   + regExprFiles.getRegExp() + "]");
             regexRules.add(regExprFiles);
          }
@@ -416,12 +405,12 @@ public class PGETaskInstance implements 
 
    protected Metadata generateMetadataForProduct(
          File product, RegExprOutputFiles regexRule) throws Exception {
-      log(Level.FINE, "Loading metadata writer ["
+      logger.log(Level.FINE, "Loading metadata writer ["
             + regexRule.getConverterClass() + "] for product [" + product + "]");
       PcsMetFileWriter writer = (PcsMetFileWriter) Class.forName(
             regexRule.getConverterClass()).newInstance();
       if (regexRule.getRenamingConv() != null) {
-         log(Level.FINE, "Renaming product [" + product + "]...");
+         logger.log(Level.FINE, "Renaming product [" + product + "]...");
          product = renameProduct(product, regexRule.getRenamingConv());
       }
       return getMetadataForProduct(product, writer, regexRule.getArgs());
@@ -434,7 +423,7 @@ public class PGETaskInstance implements 
       String newFileName = PathUtils.doDynamicReplacement(
             renamingConv.getRenamingString(), curMetadata);
       File newFile = new File(product.getParentFile(), newFileName);
-      log(Level.INFO, "Renaming product [" + product + "] to ["
+      logger.log(Level.INFO, "Renaming product [" + product + "] to ["
             + newFile + "]");
       if (!product.renameTo(newFile)) {
          throw new IOException("Renaming returned false");
@@ -444,19 +433,19 @@ public class PGETaskInstance implements 
 
    protected Metadata getMetadataForProduct(File product,
          PcsMetFileWriter writer, Object[] args) throws Exception {
-      log(Level.INFO, "Generating metadata for product [" + product + "]");
+      logger.log(Level.INFO, "Generating metadata for product [" + product + "]");
       return writer.getMetadataForFile(product, pgeMetadata, args);
    }
 
    protected void writeMetadataFile(Metadata metadata, String toFile)
          throws Exception {
-      log(Level.INFO, "Writing out metadata file [" + toFile + "]");
+      logger.log(Level.INFO, "Writing out metadata file [" + toFile + "]");
       new SerializableMetadata(metadata, "UTF-8", false)
             .writeMetadataToXmlStream(new FileOutputStream(toFile));
    }
 
    protected ScriptFile buildPgeRunScript() {
-      log(Level.FINE,
+      logger.log(Level.FINE,
             "Creating PGE run script for shell [" + pgeConfig.getShellType()
                   + "] with contents " + pgeConfig.getExeCmds());
       ScriptFile sf = new ScriptFile(pgeConfig.getShellType());
@@ -466,23 +455,21 @@ public class PGETaskInstance implements 
 
    protected File getScriptPath() {
       File script = new File(pgeConfig.getExeDir(), getPgeScriptName());
-      log(Level.FINE, "Script file with be written to [" + script + "]");
+      logger.log(Level.FINE, "Script file with be written to [" + script + "]");
       return script;
    }
 
    protected String getPgeScriptName() {
       String pgeScriptName = "sciPgeExeScript_" + pgeMetadata.getMetadata(NAME);
-      log(Level.FINE, "Generated script file name [" + pgeScriptName + "]");
+      logger.log(Level.FINE, "Generated script file name [" + pgeScriptName + "]");
       return pgeScriptName;
    }
 
    protected void runPge() throws Exception {
       ScriptFile sf = null;
-      OutputStream stdOS = createStdOutLogger();
-      OutputStream errOS = createStdErrLogger();
       try {
          long startTime = System.currentTimeMillis();
-         log(Level.INFO, "PGE start time [" + new Date(startTime) + "]");
+         logger.log(Level.INFO, "PGE start time [" + new Date(startTime) + "]");
 
          // create script to run
          sf = buildPgeRunScript();
@@ -490,22 +477,21 @@ public class PGETaskInstance implements 
 
          // run script and evaluate whether success or failure
          updateStatus(RUNNING_PGE.getWorkflowStatusName());
-         log(Level.INFO, "Starting execution of PGE...");
+         logger.log(Level.INFO, "Starting execution of PGE...");
          if (!wasPgeSuccessful(ExecUtils.callProgram(
-               pgeConfig.getShellType() + " " + getScriptPath(),
-               stdOS, errOS,
+               pgeConfig.getShellType() + " " + getScriptPath(), logger,
                new File(pgeConfig.getExeDir()).getAbsoluteFile()))) {
             throw new RuntimeException("Pge didn't finish successfully");
          } else {
-            log(Level.INFO,
+            logger.log(Level.INFO,
                   "Successfully completed running: '" + sf.getCommands() + "'");
          }
 
          long endTime = System.currentTimeMillis();
-         log(Level.INFO, "PGE end time [" + new Date(startTime) + "]");
+         logger.log(Level.INFO, "PGE end time [" + new Date(startTime) + "]");
 
          long runTime = endTime - startTime;
-         log(Level.INFO, "PGE runtime in millis [" + runTime + "]");
+         logger.log(Level.INFO, "PGE runtime in millis [" + runTime + "]");
 
          pgeMetadata.replaceMetadata(PGE_RUNTIME, Long.toString(runTime));
 
@@ -513,26 +499,15 @@ public class PGETaskInstance implements 
          throw new Exception("Exception when executing PGE commands '"
                + (sf != null ? sf.getCommands() : "NULL") + "' : "
                + e.getMessage(), e);
-      } finally {
-         try { stdOS.close(); } catch (Exception e) {}
-         try { errOS.close(); } catch (Exception e) {}
       }
    }
 
-   protected LoggerOuputStream createStdOutLogger() {
-      return new LoggerOuputStream(Level.INFO);
-   }
-
-   protected LoggerOuputStream createStdErrLogger() {
-      return new LoggerOuputStream(Level.SEVERE);
-   }
-
    protected boolean wasPgeSuccessful(int returnCode) {
       return returnCode == 0;
    }
 
    protected ProductCrawler createProductCrawler() throws Exception {
-      log(Level.INFO, "Configuring ProductCrawler...");
+      logger.log(Level.INFO, "Configuring ProductCrawler...");
       StdProductCrawler crawler = new StdProductCrawler();
       crawler.setMetFileExtension(pgeMetadata.getMetadata(MET_FILE_EXT));
       crawler.setClientTransferer(pgeMetadata
@@ -558,10 +533,10 @@ public class PGETaskInstance implements 
             "true") : true;
       crawler.setCrawlForDirs(crawlForDirs);
       crawler.setNoRecur(!recur);
-      log(Level.FINE,
+      logger.log(Level.FINE,
             "Passing Workflow Metadata to CAS-Crawler as global metadata . . .");
       crawler.setGlobalMetadata(pgeMetadata.asMetadata(PgeMetadata.Type.DYNAMIC));
-      log(Level.FINE, "Created ProductCrawler ["
+      logger.log(Level.FINE, "Created ProductCrawler ["
             + crawler.getClass().getCanonicalName() + "]");
       return crawler;
    }
@@ -578,7 +553,7 @@ public class PGETaskInstance implements 
       boolean attemptIngestAll = Boolean.parseBoolean(pgeMetadata
             .getMetadata(ATTEMPT_INGEST_ALL));
       for (File crawlDir : crawlDirs) {
-         log(Level.INFO, "Crawling for products in [" + crawlDir + "]");
+         logger.log(Level.INFO, "Crawling for products in [" + crawlDir + "]");
          crawler.crawl(crawlDir);
          if (!attemptIngestAll) {
             verifyIngests(crawler);
@@ -590,7 +565,7 @@ public class PGETaskInstance implements 
    }
 
    protected void verifyIngests(ProductCrawler crawler) throws Exception {
-      log(Level.INFO, "Verifying ingests successful...");
+      logger.log(Level.INFO, "Verifying ingests successful...");
       boolean ingestsSuccess = true;
       String exceptionMsg = "";
       for (IngestStatus status : crawler.getIngestStatus()) {
@@ -601,7 +576,7 @@ public class PGETaskInstance implements 
                   + status.getResult() + "',msg='" + status.getMessage() + "']";
             ingestsSuccess = false;
          } else if (!status.getResult().equals(IngestStatus.Result.SUCCESS)) {
-            log(Level.WARNING, "Product was not ingested [file='"
+            logger.log(Level.WARNING, "Product was not ingested [file='"
                   + status.getProduct().getAbsolutePath() + "',result='"
                   + status.getResult() + "',msg='" + status.getMessage() + "']");
          }
@@ -609,7 +584,7 @@ public class PGETaskInstance implements 
       if (!ingestsSuccess) {
          throw new Exception(exceptionMsg);
       } else {
-         log(Level.INFO, "Ingests were successful");
+         logger.log(Level.INFO, "Ingests were successful");
       }
    }
 
@@ -618,50 +593,4 @@ public class PGETaskInstance implements 
       wm.updateMetadataForWorkflow(workflowInstId,
             pgeMetadata.asMetadata(PgeMetadata.Type.DYNAMIC));
    }
-
-   /**
-    * OutputStream which wraps {@link PGETaskInstance}'s
-    * {@link PGETaskInstance#log(Level, String)} method.
-    *
-    * @author bfoster (Brian Foster)
-    */
-   protected class LoggerOuputStream extends OutputStream {
-
-      private CharBuffer buffer;
-      private Level level;
-
-      public LoggerOuputStream(Level level) {
-         this(level, 512);
-      }
-
-      public LoggerOuputStream(Level level, int bufferSize) {
-         this.level = level;
-         buffer = CharBuffer.wrap(new char[bufferSize]);
-      }
-
-      @Override
-      public void write(int b) throws IOException {
-         if (!buffer.hasRemaining()) {
-            flush();
-         }
-         buffer.put((char) b);
-      }
-
-      @Override
-      public void flush() {
-         if (buffer.position() > 0) {
-            char[] flushContext = new char[buffer.position()];
-            System.arraycopy(buffer.array(), 0, flushContext, 0,
-                  buffer.position());
-            log(level, new String(flushContext));
-            buffer.clear();
-         }
-      }
-
-      @Override
-      public void close() throws IOException {
-         flush();
-         super.close();
-      }
-   }
 }

Modified: oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/metadata/PgeTaskMetKeys.java
URL: http://svn.apache.org/viewvc/oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/metadata/PgeTaskMetKeys.java?rev=1302593&r1=1302592&r2=1302593&view=diff
==============================================================================
--- oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/metadata/PgeTaskMetKeys.java (original)
+++ oodt/trunk/pge/src/main/java/org/apache/oodt/cas/pge/metadata/PgeTaskMetKeys.java Mon Mar 19 18:41:31 2012
@@ -45,6 +45,12 @@ public enum PgeTaskMetKeys {
          "PGETask/PgeConfigBuilder",
          "PGETask/PgeConfigBuilder"),
    /**
+    * The java logger {@link FileHandler} pattern (only for filename though).
+    */
+   LOG_FILENAME_PATTERN(
+         "PGETask/LogFilenamePattern",
+         "PGETask/LogFilenamePattern"),
+   /**
     * List of {@link ConfigFilePropertyAdder}s classpaths to be run.
     */
    PROPERTY_ADDERS(

Modified: oodt/trunk/pge/src/test/org/apache/oodt/cas/pge/TestPGETaskInstance.java
URL: http://svn.apache.org/viewvc/oodt/trunk/pge/src/test/org/apache/oodt/cas/pge/TestPGETaskInstance.java?rev=1302593&r1=1302592&r2=1302593&view=diff
==============================================================================
--- oodt/trunk/pge/src/test/org/apache/oodt/cas/pge/TestPGETaskInstance.java (original)
+++ oodt/trunk/pge/src/test/org/apache/oodt/cas/pge/TestPGETaskInstance.java Mon Mar 19 18:41:31 2012
@@ -38,7 +38,6 @@ import org.apache.commons.io.FileUtils;
 //OODT imports
 import org.apache.oodt.cas.metadata.Metadata;
 import org.apache.oodt.cas.pge.PGETaskInstance;
-import org.apache.oodt.cas.pge.PGETaskInstance.LoggerOuputStream;
 import org.apache.oodt.cas.pge.config.DynamicConfigFile;
 import org.apache.oodt.cas.pge.config.MockPgeConfigBuilder;
 import org.apache.oodt.cas.pge.config.OutputDir;
@@ -65,14 +64,9 @@ import junit.framework.TestCase;
  */
 public class TestPGETaskInstance extends TestCase {
 
-   private List<PGETaskInstance> pgeTasks = Lists.newArrayList();
    private List<File> tmpDirs = Lists.newArrayList();
 
    public void tearDown() throws Exception {
-      for (PGETaskInstance pgeTask : pgeTasks) {
-         pgeTask.closePgeLogger();
-      }
-      pgeTasks.clear();
       for (File tmpDir : tmpDirs) {
          FileUtils.forceDelete(tmpDir);
       }
@@ -160,55 +154,26 @@ public class TestPGETaskInstance extends
 
    @SuppressWarnings("unchecked") // FileUtils.readLines cast to List<String>
    public void testLogger() throws Exception {
-      File tmpFile = File.createTempFile("bogus", "bogus");
-      File tmpDir = tmpFile.getParentFile();
-      tmpFile.delete();
-      File tmpDir3 = new File(tmpDir, UUID.randomUUID().toString());
-      assertTrue(tmpDir3.mkdirs());
-
       PGETaskInstance pgeTask1 = createTestInstance();
-      pgeTask1.log(Level.INFO, "pge1 message1");
-      pgeTask1.log(Level.INFO, "pge1 message2");
-      pgeTask1.log(Level.INFO, "pge1 message3");
-      pgeTask1.closePgeLogger();
+      PGETaskInstance pgeTask2 = createTestInstance();
+
+      pgeTask1.logger.log(Level.INFO, "pge1 message1");
+      pgeTask1.logger.log(Level.INFO, "pge1 message2");
+      pgeTask2.logger.log(Level.SEVERE, "pge2 message1");
+      pgeTask1.logger.log(Level.INFO, "pge1 message3");
+
+      pgeTask1.logger.getHandlers()[0].flush();
+      pgeTask2.logger.getHandlers()[0].flush();
       List<String> messages = FileUtils.readLines(
             new File(pgeTask1.pgeConfig.getExeDir() + "/logs").listFiles()[0],
             "UTF-8");
       assertEquals("INFO: pge1 message1", messages.get(1));
       assertEquals("INFO: pge1 message2", messages.get(3));
       assertEquals("INFO: pge1 message3", messages.get(5));
-
-      PGETaskInstance pgeTask2 = createTestInstance();
-      pgeTask2.log(Level.SEVERE, "pge2 message1");
-      pgeTask2.closePgeLogger();
       messages = FileUtils.readLines(new File(pgeTask2.pgeConfig.getExeDir()
             + "/logs").listFiles()[0], "UTF-8");
+      System.out.println(messages);
       assertEquals("SEVERE: pge2 message1", messages.get(1));
-
-      PGETaskInstance pgeTask3 = new PGETaskInstance() {
-         @Override
-         protected LoggerOuputStream createStdOutLogger() {
-            return new LoggerOuputStream(Level.INFO, 10);
-         }
-      };
-      pgeTask3.workflowInstId = "1234";
-      pgeTask3.pgeMetadata = new PgeMetadata();
-      pgeTask3.pgeConfig = new PgeConfig();
-      pgeTask3.pgeConfig.setExeDir(tmpDir3.getAbsolutePath());
-      pgeTask3.initializePgeLogger();
-      LoggerOuputStream los = pgeTask3.createStdOutLogger();
-      los.write("This is a test write to a log file".getBytes());
-      los.close();
-      pgeTask3.closePgeLogger();
-      messages = FileUtils.readLines(new File(tmpDir3, "logs").listFiles()[0],
-            "UTF-8");
-      assertEquals(8, messages.size());
-      assertEquals("INFO: This is a ", messages.get(1));
-      assertEquals("INFO: test write", messages.get(3));
-      assertEquals("INFO:  to a log ", messages.get(5));
-      assertEquals("INFO: file", messages.get(7));
-
-      FileUtils.forceDelete(tmpDir3);
    }
 
    public void testUpdateStatus() throws Exception {
@@ -360,8 +325,7 @@ public class TestPGETaskInstance extends
       pgeTask.pgeConfig = new PgeConfig();
       File exeDir = createTmpDir(workflowInstId);
       pgeTask.pgeConfig.setExeDir(exeDir.getAbsolutePath());
-      pgeTask.initializePgeLogger();
-      pgeTasks.add(pgeTask);
+      pgeTask.logger = pgeTask.createLogger();
       return pgeTask;
    }