问题描述
我有一个日志文件log.txt,它是由log4j生成的
现在,我需要复制日志文件的全部内容,并将复制数据发送为电子邮件.
以下是我的代码: LO4J属性:
#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 log4j.appender.file.append=true log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern= %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 #CONFIGURE SMTP log4j.appender.email=org.apache.log4j.net.SMTPAppender log4j.appender.email.SMTPHost=smtp.gmail.com log4j.appender.email.SMTPUsername=ilavarasan.mbsjgr@gmail.com log4j.appender.email.SMTPPassword=Flower@123 log4j.appender.email.From=ilavarasan.mbsjgr@gmail.com log4j.appender.email.To=ilavarasan.mtss@gmail.com log4j.appender.email.Subject=Log of messages log4j.appender.email.BufferSize=1 log4j.appender.email.EvaluatorClass=TriggerLogEvent log4j.appender.email.layout=org.apache.log4j.PatternLayout log4j.appender.email.layout.ConversionPattern=%m # INFO level will be logged log4j.logger.comparexmlf1.mailer1 = INFO, email # turn off additivity log4j.logger.comparexmlf1.mailer1 = false
邮件的Java代码:
MimeMessage message = new MimeMessage(session); 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())); message.addHeaderLine("line"); MimeHeader header1=new MimeHeader("Content-Type","test/html"); line10.setContent(htmlBody,"text/html"); message.setContent(htmlBody, "text/html; charset=ISO-8859-1");
log4j smtp appender
的Java代码public class Mailer1 { private static final Logger logger = Logger.getLogger(Mailer1.class); public void logMail(String mailString) { logger.info(mailString); } }
尝试了我自己的应用程序发送邮件并使用了Log4J Appender.
有人可以帮助我吗?提前致谢.
推荐答案
首先,您必须从log4j配置获得FileAppender
String pathLogFile = ""; Enumeration enumeration = Logger.getRootLogger().getAllAppenders(); while ( enumeration.hasMoreElements() ){ Appender appender = (Appender) e.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) { sb.append(singleLine + "\n"); } br.close(); String allLines = sb.toString();
然后用文件的内容组成邮件:
message.setContent(allLines);
更新(仅获取以...开头的行):
String singleLine; while ((singleLine = br.readLine()) != null) { if(singleLine.startsWith("Err :")) { sb.append(singleLine + "<br>"); } }
问题描述
I have a Log File log.txt and it is being generated by log4j
Now I need to copy the Entire content of the log file and send the copied data as an Email.
below are my codes: Lo4j 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 log4j.appender.file.append=true log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern= %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 #CONFIGURE SMTP log4j.appender.email=org.apache.log4j.net.SMTPAppender log4j.appender.email.SMTPHost=smtp.gmail.com log4j.appender.email.SMTPUsername=ilavarasan.mbsjgr@gmail.com log4j.appender.email.SMTPPassword=Flower@123 log4j.appender.email.From=ilavarasan.mbsjgr@gmail.com log4j.appender.email.To=ilavarasan.mtss@gmail.com log4j.appender.email.Subject=Log of messages log4j.appender.email.BufferSize=1 log4j.appender.email.EvaluatorClass=TriggerLogEvent log4j.appender.email.layout=org.apache.log4j.PatternLayout log4j.appender.email.layout.ConversionPattern=%m # INFO level will be logged log4j.logger.comparexmlf1.mailer1 = INFO, email # turn off additivity log4j.logger.comparexmlf1.mailer1 = false
a piece of java code for Mail :
MimeMessage message = new MimeMessage(session); 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())); message.addHeaderLine("line"); MimeHeader header1=new MimeHeader("Content-Type","test/html"); line10.setContent(htmlBody,"text/html"); message.setContent(htmlBody, "text/html; charset=ISO-8859-1");
A piece of java code for Log4j SMTP Appender
public class Mailer1 { private static final Logger logger = Logger.getLogger(Mailer1.class); public void logMail(String mailString) { logger.info(mailString); } }
Tried both my own app to send the mail and used log4j appender.But both not copying the log file and not throwing the emails.
Can any one help me on this? Thanks in Advance.
推荐答案
First of all you have to get the FileAppender from your log4j configuration
String pathLogFile = ""; Enumeration enumeration = Logger.getRootLogger().getAllAppenders(); while ( enumeration.hasMoreElements() ){ Appender appender = (Appender) e.nextElement(); if ( appender instanceof FileAppender ){ pathLogFile = ((FileAppender)appender).getFile(); //here you get the path break; } }
Now that you got the path for your log file, read all lines:
StringBuffer sb = new StringBuffer(); FileInputStream fstream = new FileInputStream(pathLogFile); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String singleLine; while ((singleLine = br.readLine()) != null) { sb.append(singleLine + "\n"); } br.close(); String allLines = sb.toString();
And then compose the mail with the content of the file:
message.setContent(allLines);
Update (get only lines that begin with...):
String singleLine; while ((singleLine = br.readLine()) != null) { if(singleLine.startsWith("Err :")) { sb.append(singleLine + "<br>"); } }