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

本文是小编为大家收集整理的关于如何复制一个文本文件的全部内容并使用java mail API进行邮寄?的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

在此处输入图像描述 我有一个日志文件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>");
  }
}

本文地址:https://www.itbaoku.cn/post/1575167.html

问题描述

enter image description hereI 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>");
  }
}