如何为使用 java log4j 处理的每个文件生成单独的日志文件?

How to generate separate log files for each and every file processed using java log4j?

我需要为每个处理的输入文件获取一个单独的日志文件。 我已经使用 java,log4j,javamail api 编写了一个应用程序来验证 xml.it 接受输入 ini 文件(以获取 xml 文件的路径被验证)。一旦一个文件被处理,它应该在使用文件名去下一个文件之前生成日志文件。 最后,如果每个 ini 文件有任何错误,我必须触发一个错误邮件。 现状: 从 ini 文件名中获取 xml 路径,已验证,但如果我处理多个 file.i 它会生成单个日志,每个日志都需要单独的日志文件 files.I 将附上我的整个源代码有了这个。 请帮助我如何使用 java log4j

实现此目的

我的一段java代码:

static void sendmail() throws IOException,    
MessagingException,AddressException
   {
          String to1=CarParser1.to1;
          DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy 
HH:mm:ss");
          Calendar cal = Calendar.getInstance();
            String to2 = CarParser1.to2;
            String to3= CarParser1.to3;
            String to4=CarParser1.to4;
            String from = CarParser1.from;
            String host = CarParser1.host;
            Properties properties = System.getProperties();
            properties.setProperty("mail.smtp.host", host);
            Session session = Session.getDefaultInstance(properties);
            MimeMessage message = new MimeMessage(session); 
            int m_toterr,m_totwarn;
            String getfilepath="";
            String pathLogFile = "D:/logfile.log";
            Enumeration enumeration = 
CarParser1.logger.getRootLogger().getAllAppenders();
            try {
                m_toterr=validatexml.Total_err;
                message.setFrom(new InternetAddress(from));   
                message.addRecipient(Message.RecipientType.TO, new 
InternetAddress(to1));

                message.setSubject("RE : CAR Validation Report at : 
"+dateFormat.format(cal.getTime())); 

                 while ( enumeration.hasMoreElements() )
                 {
                       Appender appender = (Appender) 
enumeration.nextElement();
                       if ( appender instanceof FileAppender )
                       {
                          pathLogFile  = 
((FileAppender)appender).getFile(); //here you get the path
                          break;
                       }
                    }
                    StringBuffer sb = new StringBuffer();
                    FileInputStream fstream = new 
 FileInputStream(pathLogFile);
                    BufferedReader br = new BufferedReader(new 
 InputStreamReader(fstream));

                    String singleLine;
                    while ((singleLine = br.readLine()) != null) 
                    {    if(singleLine.startsWith("Error")||
 singleLine.startsWith("pls")||
 singleLine.startsWith("Total")){


                      sb.append(singleLine + "<br><br>");
                    }
                    }
                    br.close();
                    String allLines = sb.toString();
                  message.setContent(allLines, "text/html; charset=ISO-
8859-1");
                 Transport.send(message);



                System.out.println("Email Sent successfully....");
                CarParser1.logger.info("Email Sent Successfully...");
                System.out.println();

            } 
            catch (MessagingException mex) 
            {
                System.out.println("Invalid Email Address.please provide 
a valid email id to send with");
                mex.printStackTrace();


            }



   }
}

我的Log4j.properties:

#Log to Console as STDOUT
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd 
HH:mm:ss}      %-5p %c %3x - %m%n
#Log to file FILE
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=D:\logfile.log
log4j.appender.file.DatePattern='.'dd/MM/yyyy HH:mm:ss
log4j.appender.file.append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss}   
%-5p %c %3x - %m%n
# LOG4J daily rolling log files configuration
log4j.rootLogger=DEBUG, RollingAppender
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=D:\logfile.log
log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd 
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppender.layout.ConversionPattern= %m%n

请点击下方link下载我的整个项目文档。 https://www.dropbox.com/s/m0sfw35t1obxl7s/project_docs.zip?dl=0

提前致谢 期待帮助,因为我今天已截止日期提交。

单独日志文件的代码:

File dir=new File("D:/newlog");
            if(!dir.exists()){
            dir.mkdir();}


            String fileName=CarParser1.si_orderid;
            File logfile=new File(dir,fileName+"_log.txt");
            if(!logfile.exists()){
            logfile.createNewFile();
            }

FileUtils.writeStringToFile(logfile,CarParser1.sb.toString());
//appending
 sb.append("\nCAR VAlidating at Path:"+final_filepath+" for the Order ID 
:"+si_orderid);
sb.append("\nUnit ID : "+si_unitid+" for the Order ID: "+si_orderid);

但我得到 O/P 作为

Java支持1.7及以下版本 CAR Validating at Path:\fms\fms_workarea\BDOPS\OPSBANK-II\SIGNALS\EFLOW\CAR\ABPEL\January-2016\Batch_16.01.1668662\ItemFile 对于订单 ID:6668662Unit ID:2518073 对于订单 ID:6668662Order ID EqualUNIT IDEqualSupplier ID Equal

AS DUMP 没有下一行,即使我写在代码上。 请指导我将结果写成已读,逐行输出成已读。

提前致谢

Log4J 的工作原理: 日志文件将仅写入 log4j.properties/.xml 中提到的文件配置。例子 : log4j.appender.RollingAppender.File=D:\logfile.log

我们可以将信息、调试、错误等不同级别的日志记录配置到不同的日志文件中。

对于不同的输入文件写入不同的日志文件的需求,请执行以下操作。 1)创建一个StringBuffer对象并追加你想要记录的所有信息 2) 然后创建一个具有所需名称的新文件对象并将其从 Stringbuffer 对象中转储。