使用 Log4j 的 Java 记录器

标签 java logging log4j

File logger我使用java处理文件,有2或3个Java组件来处理文件。我的要求是文件必须有一个日志文件,其处理细节将记录在相关的日志文件中。

问题是对于单个文件它运行良好,但对于多个文件我遇到问题。 当处理多个文件时,记录器将 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; 
      }
}

最佳答案

我认为您想创建一个记录器,指向每个要处理的文件的独特文件。

试试这个,

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

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

处理完文件后,删除记录器/附加器。 (这一点很重要)

关于使用 Log4j 的 Java 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19064720/

相关文章:

java - 为什么 Hibernate 会抛出 org.hibernate.exception.LockAcquisitionException?

java - 如何在java中读取文本文件并将行分配给变量

java - 如何获取网站证书?

java - setCellType(HSSFCELL.CELL_TYPE_NUMERIC) 在 apache poi 中不起作用

java - 使用 Log4J 1.*,如何将两个包写入两个单独的文件?

mysql - 在mysql中记录所有查询

java - Log4j 删除后不重新创建日志文件

logging - 如何在不违反坚实原则的情况下正确实现日志记录?

java - log4j 仅使用 log4j.xml 创建文件名中带有时间戳的日志文件

file - 最大文件大小 - log4j FileAppender 支持