我需要为每个处理的输入文件获取一个单独的日志文件。 我用java,log4j,javamail api编写了一个app来验证xml.it接受输入的ini文件(以获取要验证的xml文件的路径)。一个文件被处理,它应该在生成之前生成日志文件带文件名的下一个文件。 最后,如果有任何错误,我必须为每个ini文件触发错误邮件。 现状: 从ini文件名中获取xml路径,经过验证,但是如果我处理多个file.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
请点击以下链接下载我的整个项目文档。 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 \ 2016年1月\ Batch_16.01.16 \ 6668662 \ ItemFile订单ID:6668662单位ID:2518073订单ID:6668662订购ID EqualUNIT IDEqualSupplier ID Equal
AS DUMP没有下一行即使我写了代码。 请指导我将结果写成读,逐行输出。
提前致谢
答案 0 :(得分:0)
Log4J的工作原理: 日志文件将仅写入log4j.properties/.xml中提到的文件配置。示例: 的 log4j.appender.RollingAppender.File = d:\ LOGFILE.LOG 强>
我们可以将不同级别的日志记录(如info,debug,error)配置到不同的日志文件中。
要求为不同的输入文件写入不同的日志文件,请执行以下操作。 1)创建一个StringBuffer对象并附加要记录它的所有信息 2)然后创建一个具有必需名称的新文件对象,并从Stringbuffer对象中转储它。