一、简易使用logback,不含有logback.xml
- 下载 logback和slf4j的几个jar包,包括3个即可:logback-core-1.1.7.jar 、logback-classic-1.1.7.jar、slf4j-api-1.7.21.jar,将这几个包导入到自己的工程中去,鼠标右键点击工程——build path——config build path —— libraries——add extenal jars。
- 直接在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的心得,基本上够用