常用日志框架的使用

一、log4j.jar

适用于普通java项目只导入该包,加上配置文件就可以实现记录日志的功能

1. pom.xml
	<dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>1.2.17</version>
	</dependency>
2. 代码示例
package com.ykq;

import org.apache.log4j.Logger;

/**
 * @author YKQ
 * 当没有配置文件log4j.properties时,并且使用了log4j的工具类
 * 报如下错:
 * log4j:WARN No appenders could be found for logger (com.ykq.Log4jLearn).
 * log4j:WARN Please initialize the log4j system properly.
 * log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
 * 
 */
public class Log4jLearn {
	private static final Logger LOGGER = Logger.getLogger(Log4jLearn.class);
	
	public static void main(String[] args) {
		// error级别日志.
		LOGGER.error("一二三四五六七八九");
		// info级别日志.
		LOGGER.info("123456789");
		// info级别及以下等级日志带参数.不建议直接使用+拼接,建议如下方式
		if(LOGGER.isInfoEnabled()) {
			LOGGER.info("123456789" + new Object());
		}
		// debug级别日志.
		LOGGER.debug("壹贰叁肆伍陆柒捌玖");
		if(LOGGER.isDebugEnabled()) {
			LOGGER.debug("壹贰叁肆伍陆柒捌玖" + new Object());
		}
	}
}
3. log4j.properties
# 根logger设置,定义info级别的日志的,则比info等级低的日志,都不会打印,比info高的都会打印
# 例如:error级别的日志都会打印,而debug级别的日志都不会打印
# 这表示日志级别为INFO,而console和file是别名,都是INFO级别日志的别名
log4j.rootLogger = INFO,console,file

# 输出信息到控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
# 输出到控制台的布局格式
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss} %l-%m%n

# 输出INFO 级别以上的日志文件设置 
# 每天只产生一个文件
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
# 输出到文件以及文件的位置
log4j.appender.file.File = target/LogProject-interface.log
log4j.appender.file.Append = true
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %l - [ %p ]-%m%n

二、commons-logging.jar

common-logging不具体实现日志功能,只是提供java.util.logging和log4j的高层实现接口。当没有导入log4j时,common-logging默认实现java.util.logging。当导入了log4j时,优先实现log4j。

1. pom.xml
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
2.代码实现
package com.ykq;

import java.util.logging.Level;
import java.util.logging.Logger;

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

/**
 * @author YKQ
 * 没有导入log4j情况下
 */
public class CommonsLogLearn {
	/**
	 * 使用common-logging的类
	 */
	private static final Log LOG = LogFactory.getLog(CommonsLogLearn.class);
	/**
	 * 使用java.util.logging的类
	 */
	private static final Logger LOGGER = Logger.getLogger("com.ykq.CommonsLogLearn");
	
	public static void main(String[] args) {
		LOG.error("123456789");
		if(LOG.isInfoEnabled()) {
			LOG.info("一二三四五六七八九");
		}
		/**
		 * 由于java.util.logging没有debug级别的日志,不会打印
		 */
		if(LOG.isDebugEnabled()) {
			LOG.debug("壹贰叁肆伍陆柒捌玖");
		}
		/**
		 * 严重级别
		 */
		LOGGER.log(Level.SEVERE, "123456798");
		/**
		 * 信息级别
		 */
		LOGGER.log(Level.INFO, "一二三四五六七八九");	
	}
}
3.结果演示

可以看到commons-logging打印的日志和java.util.logging的日志格式是一样的。这是因为common-logging此时就是一个java.util.logging的一个接口。
在这里插入图片描述

4.导入log4j代码演示
package com.ykq;

import java.util.logging.Level;
import java.util.logging.Logger;

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

/**
 * @author YKQ
 */
public class CommonsLogLearn {
	/**
	 * 使用common-logging的类
	 */
	private static final Log LOG = LogFactory.getLog(CommonsLogLearn.class);
	/**
	 * 使用java.util.logging的类
	 */
	private static final Logger LOGGER = Logger.getLogger("com.ykq.CommonsLogLearn");
	/**
	 * 使用log4j的方式.
	 */
	private static final org.apache.log4j.Logger LOGG
		= org.apache.log4j.Logger.getLogger(CommonsLogLearn.class);

	public static void main(String[] args) {
		LOG.error("common-logging-123456789");
		if(LOG.isInfoEnabled()) {
			LOG.info("common-logging-一二三四五六七八九");
		}
		/**
		 * 由于java.util.logging没有debug级别的日志,不会打印
		 */
		if(LOG.isDebugEnabled()) {
			LOG.debug("common-logging-壹贰叁肆伍陆柒捌玖");
		}
		/**
		 * 严重级别
		 */
		LOGGER.log(Level.SEVERE, "java.util.logging-123456798");
		/**
		 * 信息级别
		 */
		LOGGER.log(Level.INFO, "java.util.logging-一二三四五六七八九");
		
		LOGG.error("log4j-123456798");
		LOGG.info("log4j-一二三四五六七八九");
	}

}
5.效果演示

可以看出commons-logging的类打印的日志是和log4j的打印日志实现效果是一样的。
在这里插入图片描述

三、slf4j.jar通过java.util.logging实现记录日志

slf4j类似commons-logging也只是接口,不过他更全面,提供了各种日志的实现接口。

1. pom.xml
<!-- slf4j api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- 桥接jdk记录日志的方式 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.25</version>
</dependency>
2.代码实现
package com.ykq;

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

public class Slf4jLogLearn {
	/**
	 * slf4j实现记录日志的方式.
	 */
	private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jLogLearn.class);
	public static void main(String[] args) {
		LOGGER.error("123456789");
	}
}
3.实现效果

可以看出是java.utl.logging记录日志的格式。
在这里插入图片描述

四、slf4j.jar通过log4j实现记录日志

导入上面章节log4j.jar的包以及配置文件,同时导入下面pom.xml包,按下面方式实现。

1. pom.xml
<!-- slf4j api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- 桥接log4j记录日志的方式 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>
2.代码实现
package com.ykq;

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

public class Slf4jLogLearn {
	/**
	 * slf4j实现记录日志的方式.
	 */
	private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jLogLearn.class);
	public static void main(String[] args) {
		LOGGER.error("123456789");
	}
}
3.实现效果

可以看到代码实现没有变,但打印日志的方式变成了log4j的方式。
在这里插入图片描述

五、slf4j通过logback(slf4j的原生实现)记录日志

slf4j虽然给java.util.logging和log4j以及commons-logging都提供了接口方式实现记录日志,但其实他本身也有一套实现记录日志的方式,即通过logback方式记录日志.

1.pom.xml
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-api</artifactId>
	    <version>1.7.25</version>
	</dependency>
	<!-- logback记录日志 -->
	 <!--logback-classic依赖logback-core,会自动级联引入-->
	<dependency>
	    <groupId>ch.qos.logback</groupId>
	    <artifactId>logback-classic</artifactId>
	    <version>1.2.3</version>
	</dependency>
2.代码实现
package com.ykq;

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

public class Slf4jLogLearn {
	/**
	 * slf4j实现记录日志的方式.
	 */
	private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jLogLearn.class);
	public static void main(String[] args) {
		LOGGER.error("123456789");
	}
}
3.实现效果

上面在pom中没有导入桥接logback的包,同时也没有配置logback.xml,但是还是打印了日志,可以看出slf4j与logback的兼容性极好。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值