如何复制文本文件的全部内容并使用java mail API将其发送出去?

如何复制文本文件的全部内容并使用java mail API将其发送出去?,java,log4j,jakarta-mail,Java,Log4j,Jakarta Mail,我有一个日志文件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.Patte

我有一个日志文件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代码:
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);
更新(仅获取以…)开头的行:

字符串单线;
而((singleLine=br.readLine())!=null){
if(singleLine.startsWith(“Err:”){
sb.追加(单线+“
”); } }
但它抛出一个编译时错误:此行有多个标记-字符串类型的方法getPath()未定义-行断点:mailer[line:55]-sendmail()-字符串类型的方法getPath()未定义-行:pathLogFile=((FileAppender)appender).getFile().getPath()我不需要将其作为附件发送,但我需要将其内容作为电子邮件正文结尾。请给予相应的帮助。@IlavarasanJayaraman不要忘记通过单击左侧的复选标记将此答案标记为正确答案。请帮助我按照错误日志中的格式获取电子邮件。
message.setContent(allLines);
String singleLine;
while ((singleLine = br.readLine()) != null) {
  if(singleLine.startsWith("Err :")) {
    sb.append(singleLine + "<br>");
  }
}