Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用log4j SMTP appender发送电子邮件_Java_Spring_Log4net - Fatal编程技术网

Java 如何使用log4j SMTP appender发送电子邮件

Java 如何使用log4j SMTP appender发送电子邮件,java,spring,log4net,Java,Spring,Log4net,我想在完成java任务后只向电子邮件组发送一次电子邮件 在log4j属性中,我可以发送电子邮件,但会为每个日志语句触发电子邮件 但我的要求是在所有任务完成后发送电子邮件,这意味着启动java程序,进行一些处理,这些处理将包含多个日志语句,然后发送电子邮件 下面是我的log4j smtp属性列表 #log4j.rootLogger=DEBUG, sendMail #log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.a

我想在完成java任务后只向电子邮件组发送一次电子邮件

在log4j属性中,我可以发送电子邮件,但会为每个日志语句触发电子邮件

但我的要求是在所有任务完成后发送电子邮件,这意味着启动java程序,进行一些处理,这些处理将包含多个日志语句,然后发送电子邮件

下面是我的log4j smtp属性列表

#log4j.rootLogger=DEBUG, sendMail  
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
#log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss} (%F:%M:%L)%n%m%n%n  
#log4j.appender.sendMail=org.apache.log4j.net.SMTPAppender  
##log4j.appender.sendMail.Threshold=WARN  
#log4j.appender.sendMail.To=xx@domain.com   
#log4j.appender.sendMail.From=xx@domain.com  
#log4j.appender.sendMail.SMTPHost=10.13.16.57
#log4j.appender.sendMail.Subject=Log4J Message  
#log4j.appender.sendMail.layout=org.apache.log4j.PatternLayout  
#log4j.appender.sendMail.layout.ConversionPattern=%p %t %c - %m%n  
#log4j.appender.sendMail.BufferSize=1  
#log4j.appender.sendMail.SMTPDebug=true 

用XML定义log4j配置,并添加一个logger元素用作logger名称

看到和


由于您希望在批处理运行结束时发送一封电子邮件,因此最好将所有消息聚合成某种大字符串,然后使用Spring的JavaMailSender发送一封电子邮件

您可以在使用JavaMailSender发送电子邮件时找到,但实际上您需要首先在Spring配置中配置它的一个实例:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="mail_host"/>
    <property name="port" value="25"/>
    <property name="username" value="mail_username"/>
    <property name="password" value="mail_password"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
        </props>
    </property>
</bean>
然后就是创建和发送消息的情况:

SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(body); // Your aggregated messages
mailSender.send(message);

这是最基本的,但是你会在网上找到很多其他文章和文档更详细地讨论这个问题。

如果没有XML格式,可以这样做吗?比如log4j.properties文件?我目前在.properties文件中有log4j属性。但我的问题是我只想发送一次电子邮件。此配置是否只发送一次电子邮件,还是为每个LOG_MAIL.LOG发送电子邮件?@mahesh是的,您可以。您已经定义了根记录器。添加另一个,如log4j.sendMail=mailssender。这应该可以。对不起,我没有得到添加另一个?你是说另一个伐木者还是追加者?@mahesh你可以有多个伐木者和追加者。使用log4j.logger.sendMail=mailssender定义记录器sendMail并为其分配smtp附加程序。sry,我使用旧的属性格式很久了谢谢,我的帖子中已经有了mailSender:log4j.appender.sendMail=org.apache.log4j.net.SMTPAppender,你建议再添加一个吗?因为你不想为每个日志语句发送一封电子邮件——最后只发送一封电子邮件,你有什么理由使用log4j来完成这个任务吗?你会不会更好地使用Spring的JavaMailSender?嗨,Will Keeling,我不想为每个日志发送电子邮件,因为我正在验证不同的URL和文件夹权限,批处理作业必须每40分钟发送一次电子邮件。因此,在我看来,为每个日志发送单独的电子邮件肯定不太好。你能给我介绍一下JavaMailSender吗
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="mail_host"/>
    <property name="port" value="25"/>
    <property name="username" value="mail_username"/>
    <property name="password" value="mail_password"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
        </props>
    </property>
</bean>
@Autowired
private JavaMailSender mailSender;
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(body); // Your aggregated messages
mailSender.send(message);