2013-09-28 36 views
1

File logger上午使用java处理文件,有2或3个Java组件处理文件。我的要求是文件必须有一个日志文件,它的处理细节会记录在相关的日志文件中。Java Logger with Log4j

问题是单个文件的效果很好,但是多个文件出现问题。 当多个文件都得到处理记录器记录FILE1.TXT日志的日志详细file2.log代替file1.log ...

public Class FileProcessComponent1 
{ 
public void process(String fileName) 
{ 
    Logger Log = Logg.getLogger1(fileName,this.getClass()); 
    log.info("file1 logging"); 
} 
} 

public Class FileProcessComponent2 
{ 
public void process(String fileName) 
{ 
    Logger Log = Logg.getLogger1(fileName,this.getClass()); 
    log.info("file1 logging"); 
} 
} 


public Class Logg 
{ 
     public static Logger getLogger1(String fileName,Class clazz) throws Exception 
     { 
      if(fileName == null || "".equals(fileName.trim())) 
       throw new Exception("File Name or Map for File Name is Null");   

      fileName = "/home/logs/"+fileName+".log"; 
      Logger logger = Logger.getLogger(clazz.getCanonicalName()+":"+System.nanoTime()); 
      logger.setAdditivity(false); 
      FileAppender appender = new DailyRollingFileAppender(new PatternLayout("%d{ISO8601}\t%p\t%c\t%m%n"), fileName, "'.'yyyy-MM-dd"); 
      logger.addAppender(appender); 
      logger.setLevel(Level.DEBUG); 
      return logger; 
     } 
} 
+0

您的两个组件都将相同的文件名(“file1”)传递给'getLogger1()'。毫不奇怪,他们都写入同一个文件。 –

+0

是两个使用相同的文件名 – sunleo

+0

那么,你的问题是什么?你希望他们写入不同的文件,但你总是传递相同的文件名。很明显,他们都写入相同的文件。传递不同的文件名称,以写入不同的文件。 –

回答

1

我想你想创建指向一个unqiue文件记录仪每个文件都是为了处理。

试试这个,

一),在您开始处理新文件的点,创建文件名为Loggername一个新的记录器。 b)用filename.log创建Appender并将appender分配给记录器。

现在,当您尝试获取记录器时,请始终使用getLogger()中的文件名。

处理完文件后,请移除记录器/ appender。 (这非常重要)

+0

感谢您的帮助可以给我的方式来删除记录器/ appender。 – sunleo

+0

从记录器中删除所有appender并关闭appender。 –