写给菜鸟,如何使用logback记录日志和发邮件?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyun211/article/details/81673432

一、简易使用logback,不含有logback.xml

  1. 下载 logbackslf4j的几个jar包,包括3个即可:logback-core-1.1.7.jar logback-classic-1.1.7.jarslf4j-api-1.7.21.jar,将这几个包导入到自己的工程中去,鼠标右键点击工程——build path——config build path —— libraries——add extenal jars
  2. 直接在main中写以下代码:

public class Zy_For_logback {

private static final Logger logger = LoggerFactory.getLogger(Zy_For_logback.class);

        public static void main(String[] args) {

         logger.info("我的info");

         logger.error("Goodbye error.");

}

运行此代码即可,此时没有logback.xml配置文件,所以使用的是默认的日志输出格式,2018年只会显示18,默认输出到控制台。

二、加入logback.xml配置文件,将日志输出到控制台:

由于需要将logback.xml 放入到classpath目录下,logback.xml才会有效,那么我们可以在程序代码中检查自己程序的classpath是什么,通过以下两句代码检查即可:

// 获取classpath路径

         String s = Thread.currentThread().getContextClassLoader().getResource("").getPath();

        System.out.println("classpath => " + s );

这两条语句的作用是检查本程序运行时的classpath是什么,运行发现是本工程的bin目录,于是将logback.xml放入bin目录下,logback.xml内容如下:

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <encoder>

            <pattern>%d{YYYY-mm-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} --------->> %msg%n</pattern>

        </encoder>

    </appender>

    <root level="TRACE">

        <appender-ref ref="STDOUT" />

    </root>

</configuration>

在此xml中,日志的记录时间改成了{YYYY-mm-dd HH:mm:ss.SSS} 格式,日志输出到控制台,程序运行结果如下:

注意:Encoding 属性在logback的新版本中使用会报错,删除即可

三、如何用滚动方式来记录日志?

首先要明白什么是滚动记录日志?看看IIS、apache的日志就明白了,IIS作为一个web服务程序,常年24小时不中断运行【中断了网站就完了】,IIS的日志基本上记录了本网站所有的get、post请求信息,一般说来每天产生一个日志文件,记录每天的日志信息,这种按照天、周、月产生日志的方式就是滚动方式记录日志【这避免了日志长年累月的记录在一个文件中,文件巨大】

滚动方式记录日志的配置,见以下xml代码:

<appender name="LOGS_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!--日志文件输出的文件名-->

            <FileNamePattern>${LOG_HOME}/zyApp.%d{yyyy-MM}.txt</FileNamePattern>  

            <MaxHistory>365</MaxHistory>

        </rollingPolicy>  

               <encoder>

                 <Pattern>%d   %logger{50} - %msg%n</Pattern>

               </encoder>

    </appender>

很多资料已经说明了rollingPolicy、MaxHistory的用法,我们可以照抄,需要额外说明的是:如何按照日、月、年来产生相应日志呢?非常简单,如下:

1、每天生成日志: FileNamePattern 设定为 ${LOG_HOME}/zyApp.%d{yyyy-MM-dd}.txt

2、每分钟生成日志: FileNamePattern 设定为 ${LOG_HOME}/zyApp.%d{yyyy-MM-dd_HH-mm}.txt

3、每小时生成日志: FileNamePattern 设定为 ${LOG_HOME}/zyApp.%d{yyyy-MM-dd_HH}.txt

4、每月生成日志: FileNamePattern 设定为 ${LOG_HOME}/zyApp.%d{yyyy-MM}.txt

大家可以试试,我试过,是成功的。

四、如何使用logback发送日志信息给指定邮箱?

见xml代码:

 

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">

    <smtpHost>smtp.163.com</smtpHost>

    <to>133243554054@139.com</to>

    <from>wehabve@163.com</from>

        <username>zhangyong911</username>

        <password>高洪喜</password>

    <subject>zy发</subject>

    <layout class="ch.qos.logback.classic.PatternLayout">

          <Pattern>%d-%message</Pattern>

    </layout>

  </appender>

用logback发送日志信息关键在于xml的配置正确,以上配置我试验成功,自己总结以下几条

注意:(1)to 是你发送的目的邮箱;from是你自己的发送邮箱;username是你自己的邮箱用户名;password是自己邮箱的登录密码;subject是你发送的邮件标题;

(2)在程序中 logger.error语句才可以发送邮件,这是因为logback.xml默认配置下logger.error才会发送;

(3)logback.xml中layout一定要有,否则发邮件可能失败

(4)subject中最好含有3个以上字符,如果字符太少可能发送失败;

(5)在eclipse中,一定要先把javax.mail.jar 包加入工程中,因为logback使用javax.mail.jar发送邮件!

(6)如果需要发送邮件,logback建议使用1.1.8以上版本,不建议使用1.1.7版本,因为1.1.7版本在发送邮件时有一个bug,总是有以下提示:

ERROR in ch.qos.logback.core.joran.action.NestedBasicPropertyIA-Unexpected aggregationType AS_BASIC_PROPERTY_COLLECTION

查阅官网,官网说从1.1.8版本开始消除了这个bug,我用1.2.3版本,的确没有这个bug。

(7)evaluator 和 filter 还没有搞明,加上它们后,总是无法发送邮件,原因不明。

     (8)有时候发邮件可能会失败,感觉发邮件不是很稳定

以上是我在eclipse环境下使用logback的心得,基本上够用

 

 

阅读更多
换一批

没有更多推荐了,返回首页