所需jar包:
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
代码实例:
package com.xxx.common;
import org.apache.log4j.Logger;
/**
* 单独使用log4j实例
* 缺点: 日志代码耦合性大
*
*
* @author Administrator
*
*/
public class Log4jTest {
private static Logger log = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) {
Log4jTest log4jtest = new Log4jTest();
log4jtest.log();
}
/**
* 测试打印log
*/
public void log(){
/**
* 为什么不是直接logger.debug(“debug:“+name);呢?
* 在配置文件中虽然可以使用控制级别为比debug级别更高的级别,如 info, warn,error,fatal
* 而不输出debug信息;但是,这里的字符串连接操作仍然会影响运行效率;
* 如果先判断当前logger的级别,如果级别不合适的话,连这句字符串连接都可以不做了。
*/
if (log.isDebugEnabled()){
log.debug("------DEBUG------");
}
log.info("------INFO------");
log.warn("------WARN------");
log.error("------ERROR------");
log.fatal("------FATAL------");
}
}
commons-logging 是apache提供的一个通用日志接口,用户可以自由选择第三方日志组件作为具体实现,像log4j等; commons-logging和log4j结合一起使用, 日志代码依赖于commons-logging而非log4j, 降低了日志代码的耦合性, 如果有需要更换日志实现类, 就会方便许多.
所需jar包:
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
代码实例
package com.xxx.common;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CLTest {
private static Log log = LogFactory.getLog(CLTest.class);
public static void main(String[] args) {
CLTest clTest = new CLTest();
clTest.log();
}
public void log(){
if (log.isDebugEnabled()) {
log.debug("Debug info.");
}
log.info("Info info");
log.warn("Warn info");
log.error("Error info");
log.fatal("Fatal info");
}
}
所需jar包:
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.12version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.12version>
dependency>
代码实例:
package com.xxx.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 简单日记门面(simple logging Facade for java)
* slf4j 和 log4j 结合使用, 接口: slf4j 实现类: log4j
* 优点:
* 1 SLF4J提供了占位日志记录,通过移除对isDebugEnabled(),
* isInfoEnabled()等等的检查提高了代码的可读性。
* 2 通过使用日志记录方法,直到你使用到的时候,才会去构造日志信息(字符串),
* 这就同时提高了内存和CPU的使用率
* @author Administrator
*
*/
public class SLTest {
private static final Logger logger = LoggerFactory.getLogger(SLTest.class);
public static void main(String[] args) {
SLTest sLTest = new SLTest();
sLTest.log();
}
public void log(){
/**
* 大家应该还记得,在log4j中,为了提高运行效率,
* 往往在输出信息之前,还要进行级别判断,
* 以避免无效的字符串连接操作。如下:
* if (logger.isDebugEnabled()){
* logger.debug(“debug:“+name);
* }
* slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,
* 同时把其他参数传入,在slf4j的内容部实现中,
* 如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行。
* logger.info("{} is {}", new String[]{“x",“y"});
*/
logger.debug("{}he{}",new Object[]{"object:","YY"});
logger.info("{} info is {} and {}",new Object[]{"1","2","2"});
//也可以不传object数组,传具体参数也行
logger.error("error is {} and {}","1","2");;
}
}
### set log levels ###
log4j.rootLogger = debug , stdout , D , E , R
### 1: 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
## 输出INFO级别以上的日志
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 2: 按日期生成debug以上级别到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#文件路径对, 没有文件夹 , 是会自动建立文件夹的
log4j.appender.D.File = C:/Users/Administrator/Desktop/logs/log.log
log4j.appender.D.Append = true
## 输出DEBUG级别以上的日志
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
### 3: 按日期生成error级别以上信息到文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File =C:/Users/Administrator/Desktop/logs/error.log
log4j.appender.E.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 4: 按文件大小生成总量小于一定个数的日志文件 ###
#按大小分割,循环覆盖
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R.MaxBackupIndex=2
log4j.appender.R.File=C:/Users/Administrator/Desktop/logs/partLog.log
log4j.appender.R.Threshold=DEBUG
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %p %C.%M(%L) | %m%n