如何为使用 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 对象中转储。
我需要为每个处理的输入文件获取一个单独的日志文件。 我已经使用 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 对象中转储。