繁体   English   中英

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

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

我需要为每个处理的输入文件获取一个单独的日志文件。 我已经编写了一个使用java,log4j,javamail api验证xml的应用程序。它需要输入ini文件(以获取要验证的xml文件的路径)。一旦处理了文件,则应在生成文件之前先生成日志文件具有文件名的下一个文件。 最后,如果每个ini文件有任何错误,我都必须触发一个错误邮件。 当前状态:从ini文件名获取xml路径,已验证,但是如果我处理多个文件,它会生成一个日志。我需要为每个日志文件使用单独的日志文件。我将附上我的整个源代码。 请帮助我如何使用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

请点击下面的链接下载我的整个项目文档。 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在以下路径中运行:\\ fms \\ fms_workarea \\ BDOPS \\ OPSBANK-II \\ SIGNALS \\ EFLOW \\ CAR \\ ABPEL \\ January-2016 \\ Batch_16.01.16 \\ 6668662 \\ ItemFile为订单ID:6668662单元ID: 2518073(订单ID:6666682)订单ID等于UNIT IDEqual供应商ID等于

AS DUMP没有下一行,即使我在代码上写了。 请指导我将结果写成read,将一行一行的内容按read放出。

提前致谢

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

我们可以将不同级别的日志记录(例如信息,调试,错误)配置到不同的日志文件中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM