diff --git a/CHANGES.txt b/CHANGES.txt
index bd406fc..4936c25 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -116,6 +116,9 @@
     MAPREDUCE-2483. Remove duplication of jars between Hadoop subprojects
     from build artifacts. (Eric Yang via omalley)
 
+    MAPREDUCE-2372. TaskLogAppender mechanism shouldn't be set up in
+    log4j.properties (todd)
+
   OPTIMIZATIONS
     
     MAPREDUCE-2026. Make JobTracker.getJobCounters() and
diff --git a/src/java/org/apache/hadoop/mapred/TaskLogAppender.java b/src/java/org/apache/hadoop/mapred/TaskLogAppender.java
index 3eaf42d..d60b64a 100644
--- a/src/java/org/apache/hadoop/mapred/TaskLogAppender.java
+++ b/src/java/org/apache/hadoop/mapred/TaskLogAppender.java
@@ -34,13 +34,20 @@
 public class TaskLogAppender extends FileAppender {
   private String taskId; //taskId should be managed as String rather than TaskID object
   //so that log4j can configure it from the configuration(log4j.properties). 
-  private int maxEvents;
+  private Integer maxEvents;
   private Queue<LoggingEvent> tail = null;
-  private boolean isCleanup;
+  private Boolean isCleanup;
+
+  // System properties passed in from JVM runner
+  static final String ISCLEANUP_PROPERTY = "hadoop.tasklog.iscleanup";
+  static final String LOGSIZE_PROPERTY = "hadoop.tasklog.totalLogFileSize";
+  static final String TASKID_PROPERTY = "hadoop.tasklog.taskid";
 
   @Override
   public void activateOptions() {
     synchronized (this) {
+      setOptionsFromSystemProperties();
+
       if (maxEvents > 0) {
         tail = new LinkedList<LoggingEvent>();
       }
@@ -50,6 +57,26 @@
       super.activateOptions();
     }
   }
+
+  /**
+   * The Task Runner passes in the options as system properties. Set
+   * the options if the setters haven't already been called.
+   */
+  private synchronized void setOptionsFromSystemProperties() {
+    if (isCleanup == null) {
+      String propValue = System.getProperty(ISCLEANUP_PROPERTY, "false");
+      isCleanup = Boolean.valueOf(propValue);
+    }
+
+    if (taskId == null) {
+      taskId = System.getProperty(TASKID_PROPERTY);
+    }
+
+    if (maxEvents == null) {
+      String propValue = System.getProperty(LOGSIZE_PROPERTY, "0");
+      setTotalLogFileSize(Long.valueOf(propValue));
+    }
+  }
   
   @Override
   public void append(LoggingEvent event) {
@@ -83,21 +110,21 @@
    * Getter/Setter methods for log4j.
    */
   
-  public String getTaskId() {
+  public synchronized String getTaskId() {
     return taskId;
   }
 
-  public void setTaskId(String taskId) {
+  public synchronized void setTaskId(String taskId) {
     this.taskId = taskId;
   }
 
   private static final int EVENT_SIZE = 100;
   
-  public long getTotalLogFileSize() {
+  public synchronized long getTotalLogFileSize() {
     return maxEvents * EVENT_SIZE;
   }
 
-  public void setTotalLogFileSize(long logSize) {
+  public synchronized void setTotalLogFileSize(long logSize) {
     maxEvents = (int) logSize / EVENT_SIZE;
   }
 
@@ -107,7 +134,7 @@
    * @param isCleanup
    *          true if the task is cleanup attempt, false otherwise.
    */
-  public void setIsCleanup(boolean isCleanup) {
+  public synchronized void setIsCleanup(boolean isCleanup) {
     this.isCleanup = isCleanup;
   }
 
@@ -116,7 +143,7 @@
    * 
    * @return true if the task is cleanup attempt, false otherwise.
    */
-  public boolean getIsCleanup() {
+  public synchronized boolean getIsCleanup() {
     return isCleanup;
   }
 }
diff --git a/src/java/org/apache/hadoop/mapred/TaskRunner.java b/src/java/org/apache/hadoop/mapred/TaskRunner.java
index 97afa26..2a300ee 100644
--- a/src/java/org/apache/hadoop/mapred/TaskRunner.java
+++ b/src/java/org/apache/hadoop/mapred/TaskRunner.java
@@ -460,9 +460,10 @@
     vargs.add("-Dhadoop.log.dir=" + 
         new File(System.getProperty("hadoop.log.dir")).getAbsolutePath());
     vargs.add("-Dhadoop.root.logger=" + getLogLevel(conf).toString() + ",TLA");
-    vargs.add("-Dhadoop.tasklog.taskid=" + taskid);
-    vargs.add("-Dhadoop.tasklog.iscleanup=" + t.isTaskCleanupTask());
-    vargs.add("-Dhadoop.tasklog.totalLogFileSize=" + logSize);
+    vargs.add("-D" + TaskLogAppender.TASKID_PROPERTY +  "=" + taskid);
+    vargs.add("-D" + TaskLogAppender.ISCLEANUP_PROPERTY +
+              "=" + t.isTaskCleanupTask());
+    vargs.add("-D" + TaskLogAppender.LOGSIZE_PROPERTY + "=" + logSize);
   }
 
   /**
