主流的所有日志框架Log4j,Log4j2,Logback,Commons-Logging,Slf4j介绍

Log4j简介

       诞生于1996年,属于Apache,是最早的日志框架,Apache基金会曾建议sun将Log4j引入java标准库,但是被sun拒绝了,后来sun推出了自己的日志库JUL(可惜使用范围不是很广),2015年Log4j停止更新,最新版本为1.2.17

Log4j=Loggers+Appenders+Layout(这写东西可以写在配置文件中也可以在类中进行重写覆盖掉原有的配置)

日志记录器(Loggers):只有级别高过配置中规定的才能输出,对日志信息进行级别限制     

日志级别:         

                1.off:最高等级,用于关闭所有日志记录         

                2.fatal:致命错误,级别较高,一般这种级别就不用调试时,直接重写吧         

                3.error:指出虽然发生错误事件,但仍然不影响系统的继续运行          

                4.warm:警告,有些信息不是错误信息,但是需要给程序员一些提示          

                5.info:输出重要信息,使用较多          

                6.debug:对调试应用程序非常有帮助          

                7.all:最低等级,用于打开所有日志记录         

                推荐只使用:error,warn,info,debug

输出端(Appenders):指定日志的打印地址

日志格式化器(Layout):控制日志信息的显示格式           

                1.HTMLLayout:输出为HTML表格形式           

                2.SimpleLayout(默认):格式:级别-信息(INFO-info)           

                3.PatternLayout:自己指定输出格式           

                4.TTCCLayout:包含时间,线程,类别

使用介绍

Log4j需要使用的基本jar包有 log4j-1.2.17.jar

但是若想实现一些其他的功能,比如说将日志以邮件的形式发送出去就需要引入 activation-1.1.jar 和 mail-1.4.7.jar

配置文件:

文件名:log4j.properties        properties配置文件里面是写不了中文注释的,需要将配置文件的编码改为utf-8

#设置输出级别和输出的目的地
log4j.rootLogger = debug,stdout,D,logMail
#将日志信息输出到控制台
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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

#设置外部存储
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#设置存储地址
log4j.appender.D.File = E://logs/log.log
#默认是true:将指定消息增加到文件中,false:覆盖
log4j.appender.D.Append = true
#设置输出级别
log4j.appender.D.Threshold = DEBUG 
#设置日志显示格式
log4j.appender.D.layout = org.apache.log4j.PatternLayout
#自定义日志显示格式
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


#用Email发送日志
log4j.appender.logMail = org.apache.log4j.net.SMTPAppender
#发送邮件的格式
log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout
log4j.appender.logMail.layout.LocationInfo = true 
log4j.appender.logMail.layout.Title = Struts2 Mail LogFile
#日志的错误级别
log4j.appender.logMail.Threshold = DEBUG
log4j.appender.logMail.SMTPDebug = FALSE
#邮件协议
log4j.appender.logMail.SMTPHost = SMTP.qq.com
#设置端口,可以提高安全性
log4j.appender.MAIL.SMTPPort=587
log4j.appender.logMail.From = [email protected]
log4j.appender.logMail.To = [email protected]
log4j.appender.logMail.SMTPUsername = [email protected]
#这里一定要去邮箱设置里面修改一下设置,打开AMTP服务!!!!!
log4j.appender.logMail.SMTPPassword = cdcmxpjjawpmbfgc
#邮件主题
log4j.appender.logMail.Subject = Log4j Log Messages


#将日志登录到MySQL数据库 
log4j.appender.logMySql = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logMySql.layout = org.apache.log4j.PatternLayout
log4j.appender.logMySql.Driver = com.mysql.jdbc.Driver
log4j.appender.logMySql.URL = jdbc:mysql://127.0.0.1:3306/xly
log4j.appender.logMySql.User = root
log4j.appender.logMySql.Password = root
log4j.appender.logMySql.Sql = INSERT INTOT_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('Struts2','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

基本的使用示范

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class Log4j {
	// 创建Logger对象
	static Logger logger = Logger.getLogger(Log4j.class);
	public static void main(String[] args) {
		// 使用默认的配置信息,不需要写log4j.properties
		BasicConfigurator.configure();
		// 设置日志输出级别,只有级别高于设置级别才能输出(如果不写,将使用配置文件中的默认级别;若写了,将覆盖配置文件中的级别)
		logger.setLevel(Level.INFO);
		
		logger.info("i want to try this mail");
		logger.warn("this is warn");
		logger.error("this is an error");
		logger.fatal("this is a fatal");
	}
}

Log4j2简介

       Log4j2是属于Apache的Log4j的二代版本,但是内部的结构和一代有很大的差别,Log4j2里面可以配置的内容非常的多,功能也是十分的强大

       Log4j2是有默认配置,即使你不配置它,它也能够正常的工作,若是想自定义配置文件只需要在classpath下放置log4j.xml就可以覆盖掉默认的配置文件

       log4j2支持自动重新配置,log4j2每隔一段时间就会检查一遍这个文件是否修改,最小5s一次(可以使用monitorInterval设置)

日志级别:     

                1.off:最高等级,用于关闭所有日志记录     

                2.fatal:致命错误,级别较高,一般这种级别就不用调试时,直接重写吧     

                3.error:指出虽然发生错误事件,但仍然不影响系统的继续运行      

                4.warm:警告,有些信息不是错误信息,但是需要给程序员一些提示      

                5.info:输出重要信息,使用较多     

                6.debug:调试,一般作为最低级别      

                7.debug:对调试应用程序非常有帮助      

                8.all:最低等级,用于打开所有日志记录

使用介绍

       Log4j2需要使用的基本jar包有 log4j-api-2.11.1.jar 和 log4j-core-2.11.1.jar

配置文件

文件名:log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 需要先配置Appenders,然后定义Logger,这样Appenders才会生效 -->
<Configuration status="WARN" monitorInterval="30">
  <Appenders>
  	<!-- 在控制台输出 -->
    <Console name="Console" target="SYSTEM_OUT">
    	<!-- 设置输出级别(level) -->
		<ThresholdFilter level ="info" onMatch="ACCEPT" onMismatch="DENY"/>
		<!-- 日志输出格式 -->
		<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    
	<!-- 将日志信息打印到文件中 -->
    <File name="Log" fileName="E://logs/log.log" append="true">
    	<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    	<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    </File>
    
	<!-- 每次大小超过size,就会在这个文件夹下面新建一个格式相同的txt文件 -->
	<RollingFile name="RollingFile" fileName="E://logs/web.log" filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
		<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
		<!-- 设置每个文件的最大容量 -->
		<SizeBasedTriggeringPolicy size="10 MB"/>
		<!-- 设置了同一个文件夹下最多有多少个文件,默认是7个 -->
		<DefaultRolloverStrategy max="20"/>
	</RollingFile>
  </Appenders>
  
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="Log"/>
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

基本的使用示范

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

public class Log4j2 {
	private static final Logger logger = LogManager.getLogger(Log4j2.class);

	public static void main(String[] args) {
		logger.error("this is an error");
		logger.info("this is an info");
		logger.warn("this is an warn");
	}
}

Logback简介

       Logback是由log4j的创始人离开Apache后又设计的一款开源日志 Logback最为一款二代日志系统,其强大的性能不言而喻

使用介绍

Logback需要使用的基本jar包有 logback-classic-1.0.13.jar 和 logback-core-1.0.13.jar 和 slf4j-api-1.6.0.jar

配置文件

文件名:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->  
    <property name="LOG_HOME" value="E://logs/log.log" />  
    <!-- 控制台输出 -->   
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 日志输出编码 -->  
       <Encoding>UTF-8</Encoding>   
        <layout class="ch.qos.logback.classic.PatternLayout">   
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
        </layout>   
    </appender>   
    <!-- 按照每天生成日志文件 -->   
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <Encoding>UTF-8</Encoding>   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/myApp.log.%d{yyyy-MM-dd}.log</FileNamePattern>   
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
       </layout> 
        <!--日志文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
       </triggeringPolicy>
    </appender> 
   <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->  
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />  
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />  
    <logger name="org.hibernate.SQL" level="DEBUG" />  
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />  
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />  
    
    <!-- 日志输出级别 -->
    <root level="INFO">   
        <appender-ref ref="STDOUT" />   
        <appender-ref ref="FILE" />   
    </root> 
     
     <!--日志异步到数据库 -->  
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <!--日志异步到数据库 --> 
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
           <!--连接池 --> 
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
              <driverClass>com.mysql.jdbc.Driver</driverClass>
              <url>jdbc:mysql://127.0.0.1:3306/usta</url>
              <user>root</user>
              <password>root</password>
            </dataSource>
        </connectionSource>
  </appender> -->
</configuration>

基本的使用示范


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Logback {
	private static final Logger logger = LoggerFactory.getLogger(Logback.class);

	public static void main(String[] args) {
		logger.info("this is an info");
		logger.error("this is an error");
	}
}

Commons-Logging简介

       Jakarta Commons Logging(JCL):它是一个接口,自身的日志系统十分的弱小,它可以合理的猜测你想用的日志工具,然后进行自我设置,用户不需要进行任何设置

默认配置步骤(自动配置步骤):      

                1.先在classpath下寻找commons-logging.properties文件       

                2.如果没有commons-logging.properties文件,则在classpath中寻找Log4j的包       

                3.如果没有Log4j的包,就使用java自生的日志实现类(JUL  jdk1.4+)       

                4.如果还是没有,就使用commons-logging自己提供的一个简单日志实现类(SimpleLog)

解耦:   

思考:我们为什么不直接使用一个日志系统,反而去使用一个接口呢?     

因为我们不希望我们的项目完全依赖一个日志文件,当我们引入新的内容时,如果使用的不是同一套接口就会非常的棘手,所以我们希望降低项目对一个日志系统的依赖性

使用介绍

Commons-Logging需要使用的基本jar包有 commons-logging-1.2.jar

配置文件

文件名:commons-logging.properties

#默认配置
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
#指定log4j
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

基本的使用示范:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class CommonsLogging {
	private static Log logger = LogFactory.getLog(CommonsLogging.class);
	public static void main(String[] args) {
		logger.info("this is an info");
	}
}

Slf4j简介

       Slf4j:它也是一个接口,可以为任何日志框架提供服务,并无具体的日志实现方案,你无需关心它是具体实现哪个日志系统,它会自己帮你决定,并且Slf4j是没有配置文件的,强烈推荐使用Slf4j

使用介绍

Commons-Logging需要使用的基本jar包有 log4j-1.2.17.jar 和slf4j-api-1.8.0-alpha2.jar 和 slf4j-log4j12-1.8.0-alpha2.jar

基本的使用示范

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4j {
	private static final Logger logger = LoggerFactory.getLogger(Slf4j.class);

	public static void main(String[] args) {
		logger.info("this is info");
		logger.warn("this is a warm");
	}
}

猜你喜欢

转载自blog.csdn.net/progammer10086/article/details/81837149