如何复制文本文件的全部内容并使用Java Mail API将其邮寄? [英] How to copy the entire content of a text file and mail it using java mail API?

查看:102
本文介绍了如何复制文本文件的全部内容并使用Java Mail API将其邮寄?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个日志文件log.txt,它是由log4j生成的 现在,我需要复制日志文件的整个内容,并将复制的数据作为电子邮件发送.

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.

以下是我的代码: Lo4j属性:

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

用于Mail的一段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代码

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);
}
}

尝试了我自己的应用程序来发送邮件并使用了log4j附加程序.但是都没有复制日志文件,也没有抛出电子邮件.

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.

推荐答案

首先,您必须从log4j配置中获取FileAppender

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>");
  }
}

这篇关于如何复制文本文件的全部内容并使用Java Mail API将其邮寄?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆