1.邮件告警-自动发送邮件

1.添加邮箱依赖

    <!-- 邮件start -->
<dependency>
  <groupId>commons-configuration</groupId>
  <artifactId>commons-configuration</artifactId>
  <version>1.10</version>
</dependency>

     <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-email</artifactId>
  <version>1.5</version>
</dependency>

    <!-- 邮件end -->

2.邮箱配置文件config.properties-数据配置

mail.host = smtp.163.com
mail.login = 13302948121@163.com
mail.pass = YAJCXMCRBACVQLAD
mail.touser =13302948121@163.com,3112078598@qq.com
mail.subject = test_email_20200422_5

3.封装config原有方法

package com.commonUtils;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
public class PropertiesUtils {

   private static Configuration config;

   static {
       if(null == config){
      try {
config = new PropertiesConfiguration("config.properties");
} catch (ConfigurationException e) {
e.printStackTrace();
}
      }
  }

   private PropertiesUtils(){}

   public static String getString(String key){
       return config.getString(key,"");
  }
   
   public static String[] getStringArray(String key){
       return config.getStringArray(key);
  }
   
   public static void main(String[] args) {
  String[] strs = getStringArray("mail.touser");
  for (String string : strs) {
System.out.println(string);
}
}
}

4.使用封装方法、封装发送带图片的邮件

public static void sendImageMsg() {
//image = http://tupian.baike.com/ipad/a0_78_52_01200000123847134434529793168_jpg.html
ImageHtmlEmail imail = new ImageHtmlEmail();
//本地图片直接复制路径
// String image = "请查收-----<img src = \"data/1.png\">";
String image = "请查收。<img src = \"http://n.sinaimg.cn/sinakd2020421s/70/w1080h590/20200421/eb04-isqivxf6018351.jpg\">";
System.out.println(image);
try {
//解析网络图片
DataSourceResolver[] dr = new DataSourceResolver[] {new DataSourceFileResolver(),new DataSourceUrlResolver(new URL("http://"))};
imail.setDataSourceResolver(new DataSourceCompositeResolver(dr));
//配置文件map存储结构,通过getString取值
String login = PropertiesUtils.getString("mail.login");
String pass = PropertiesUtils.getString("mail.pass");
String host = PropertiesUtils.getString("mail.host");
String subject = PropertiesUtils.getString("mail.subject");

imail.setCharset("UTF-8"); // 邮件的字符集
imail.setAuthentication(login,pass);
imail.setHostName(host);
imail.setSubject(subject);
imail.setFrom(login,"天地之间任逍遥");
imail.setHtmlMsg(image);//设置正文为图片 文字信息和图片从字符串一起传入

String[] touser = PropertiesUtils.getStringArray("mail.touser");
//处理收件邮箱
for (int i = 0; i < touser.length; i++) {
imail.addTo(touser[i]);
}
String ss = imail.send();
System.out.println(ss+"==================done");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

5.使用封装方法、封装发送带附件的邮件

public static void sendFileMsg(String... filepath) {
try {
HtmlEmail mail = new HtmlEmail();
String hostname = PropertiesUtils.getString("mail.host");
String userName = PropertiesUtils.getString("mail.login");
String password = PropertiesUtils.getString("mail.pass");
String subject = PropertiesUtils.getString("mail.subject");
mail.setCharset("utf-8");
mail.setHostName(hostname);
mail.setAuthentication(userName, password);
mail.setSubject(subject);
mail.setFrom(userName,"111");
mail.setHtmlMsg("请查收");
//添加收件人
String[] touser = PropertiesUtils.getStringArray("mail.touser");
for (int i = 0; i < touser.length; i++) {
mail.addTo(touser[i]);
}
//添加附件
EmailAttachment ea = new EmailAttachment();
for (String fp : filepath) {
ea.setPath(fp);
ea.setDisposition(EmailAttachment.ATTACHMENT);
ea.setDescription("文件传输");
File file = new File(fp);
ea.setName(file.getName());
mail.attach(ea);
}
String ss = mail.send();
System.out.println(ss+"==================done");
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

2.log4j2 日志文件系统

1.添加依赖

    <!-- slf4j 规范定义和桥架--> 
       <dependency>  
            <groupId>org.slf4j</groupId>  
             <artifactId>jcl-over-slf4j</artifactId>  
            <version>1.7.25</version>  
        </dependency>
<!-- log4j2 实现-->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.1</version>
</dependency>

2.log4j2配置文件-log级别配置、文件输出、控制台打印配置

<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<configuration status="warn" monitorInterval="600">
   <appenders>
       <console name="Console" target="SYSTEM_OUT">
           <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%-5p][%-10thread] - %l - %m%n"/>
       </console>

       <RollingFile name="RollingFileInfo" fileName="logs/info.log"
                    filePattern="logs/info.log-%d{yyyy-MM-dd}-%i">
           <Filters>
               <ThresholdFilter level="INFO"/>
               <ThresholdFilter level="TRACE" onMatch="DENY" onMismatch="NEUTRAL"/>
           </Filters>
           <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p][%-10thread]-%C{1}.%M():%L-%m%n"/>
           <Policies>
               <TimeBasedTriggeringPolicy/>
               <SizeBasedTriggeringPolicy size="100 MB"/>
           </Policies>

           <DefaultRolloverStrategy max="10">
               <Delete basePath="logs" maxDepth="1">
                   <IfFileName glob="*info.log-*" />
                   <IfLastModified age="10d" />
               </Delete>
           </DefaultRolloverStrategy>

       </RollingFile>

       <RollingFile name="RollingFileWarn" fileName="logs/warn.log"
                    filePattern="logs/warn.log-%d{yyyy-MM-dd}-%i">
           <Filters>
               <ThresholdFilter level="WARN"/>
               <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
           </Filters>
           <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p][%-10thread] - %C{1}.%M():%L - %m%n"/>
           <Policies>
               <TimeBasedTriggeringPolicy/>
               <SizeBasedTriggeringPolicy size="100 MB"/>
           </Policies>

           <DefaultRolloverStrategy max="10">
               <Delete basePath="logs" maxDepth="1">
                   <IfFileName glob="*warn.log-*" />
                   <IfLastModified age="20d" />
               </Delete>
           </DefaultRolloverStrategy>

       </RollingFile>

       <RollingFile name="RollingFileError" fileName="./logs/error.log"
                    filePattern="logs/error.log-%d{yyyy-MM-dd}-%i">
           <ThresholdFilter level="ERROR"/>
           <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p][%-10thread] - %C{1}.%M():%L - %m%n"/>
           <Policies>
               <TimeBasedTriggeringPolicy/>
               <SizeBasedTriggeringPolicy size="100 MB"/>
           </Policies>

           <DefaultRolloverStrategy max="10">
               <Delete basePath="logs" maxDepth="1">
                   <IfFileName glob="*error.log-*" />
                   <IfLastModified age="30d" />
               </Delete>
           </DefaultRolloverStrategy>

       </RollingFile>

   </appenders>

   <loggers>
       <!--过滤掉spring和hibernate的一些无用的debug信息-->
       <logger name="org.springframework" level="INFO"></logger>
       <logger name="org.hibernate" level="ERROR">
           <AppenderRef ref="Console"/>
       </logger>
       <logger name="com.baidu.unbiz" level="INFO">
           <appender-ref ref="Console"/>
       </logger>
       <logger name="org.apache.zookeeper" level="WARN">
           <appender-ref ref="Console"/>
       </logger>
       <logger name="org.apache.curator" level="WARN">
           <appender-ref ref="Console"/>
       </logger>
       <logger name="com.xxl.conf" level="WARN">
           <appender-ref ref="Console"/>
       </logger>
       <root level="info">
           <appender-ref ref="Console"/>
           <appender-ref ref="RollingFileInfo"/>
           <appender-ref ref="RollingFileWarn"/>
           <appender-ref ref="RollingFileError"/>
       </root>
   </loggers>

</configuration>

3.log简单使用

private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
logger.info("info信息");
logger.warn("warn警告警告");
logger.error("error出错了");
logger.debug("debug模式");

3.邮件可以配合html等渲染成高级邮件-模板引擎: