【发布时间】:2016-01-29 03:50:28
【问题描述】:
我需要为每个处理的输入文件获取一个单独的日志文件。 我已经使用 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 Validating at Path:\fms\fms_workarea\BDOPS\OPSBANK-II\SIGNALS\EFLOW\CAR\ABPEL\January-2016\Batch_16.01.16\6668662\ItemFile 订单 ID:6668662Unit ID:2518073 订单 ID:6668662Order ID EqualUNIT IDEqualSupplier ID Equal
即使我在代码上写了,也没有下一行。 请指导我将结果写为已读,逐行输出为已读。
提前致谢
【问题讨论】:
标签: java logging log4j jakarta-mail