基本想法就是再每个doPost里建立新的logger实例,各线程里的logger实例互不影响。测试了下基本能达到要求。还有2个要求没有实现,请大家帮我想象办法。1.要求ERROR信息和INFO信息格式不同。ERROR要求详细的格式,INFO只是简单的输出程序流程。
2.还要求有一个总的日志文件,里面也是按请求保存日志信息,包括ERROR信息,和INFO信息。
代码,自己写一个MyLog类,构造函数初始化,然后返回新的logger 
   1. import org.apache.log4j.*;  
   2.   
   3. public class MyLog  
   4. {  
   5.     private RollingFileAppender fileAppendar    = null;  
   6.     private ConsoleAppender     consoleAppendar = null;  
   7.     private PatternLayout       layout          = null;  
   8.     private String              pattrenlayput   = "[%p]-[%l]-[%m]%n";  
   9.     private Logger              MainLogger      = null;  
  10.   
  11.     /* 
  12.      * FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 
  13.      */  
  14.     public MyLog(String FileName, String cname) throws Exception  
  15.     {  
  16.         layout = new PatternLayout(pattrenlayput);  
  17.         // log文件设置  
  18.         fileAppendar = new RollingFileAppender(layout, FileName, true);  
  19.         fileAppendar.setMaximumFileSize(4 * 1024);  
  20.         fileAppendar.setMaxBackupIndex(10);  
  21.         // 控制台设置  
  22.         consoleAppendar = new ConsoleAppender(layout, "System.out");  
  23.         // 清除原日志格式  
  24.         // LogManager.resetConfiguration();  
  25.         MainLogger = Logger.getLogger(cname);  
  26.         // // 设置级别  
  27.         MainLogger.setLevel(Level.INFO);  
  28.         MainLogger.addAppender(fileAppendar);  
  29.         MainLogger.addAppender(consoleAppendar);  
  30.     }  
  31.   
  32.     public Logger GetLog()  
  33.     {  
  34.         return MainLogger;  
  35.     }  
  36. }  
测试代码:需要注意的就是
LogManager.resetConfiguration(); 这个方法清除以前的输出格式信息,应该是log4j默认格式。DateTime.NowDT();是自己写的个时间方法,这里返回年月日,精确到毫秒。MyLog创建2个Logger实例,第二个参数名字不能一样,如果一样就回打印重复(原理我不理解) ,所以给的参数是精确到毫秒的字符串。   1. import org.apache.log4j.*;  
   2.   
   3. class TestDes  
   4. {  
   5.     // public static Logge logger = new MyLog("")  
   6.     public static void main(String[] args)  
   7.     {  
   8.           
   9.         try  
  10.         {  
  11.              String FileName = "G:\\" + DateTime.NowDT();//           
  12.              LogManager.resetConfiguration();  
  13.                
  14.                
  15.              Logger test1 = new MyLog("G:\\a1.log",DateTime.NowDT()).GetLog();  
  16.                    
  17.              Logger test2 = new MyLog("G:\\a2.log",DateTime.NowDT()).GetLog();  
  18.                
  19.                           
  20.              test1.error("输出error");                   
  21.              test2.info("输出info");  
  22.     } catch ( Exception e )  
  23.         {  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  
  27. }