Log4j
什么是Log4j
- Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件
- 我们也可以控制每一条日志的输出格式;
- 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
- 通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
1. 配置maven,引入jar包
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
2. 配置log4j的配置文件
其配置文件名为log4j.properties,需要手动在java/resources下创建,如果建在其他位置,idea这个工具将无法识别(如果无法识别后面会介绍怎么解决)。下面介绍该配置文件的几个基本配置项。
a. 日志的输出的目的地
形式 | 描述 |
---|---|
org.apache.log4j.ConsoleAppender | 控制台 |
org.apache.log4j.FileAppender | 文件 |
org.apache.log4j.DailyRollingFileAppender | 每天产生一个日志文件 |
org.apache.log4j.RollingFileAppender | 文件大小到达指定尺寸的时候产生一个新的文件 |
org.apache.log4j.WriterAppender | 将日志信息以流格式发送到任意指定的地方 |
b. Layout:日志输出格式
形式 | 描述 |
---|---|
org.apache.log4j.HTMLLayout | 以HTML表格形式布局 |
org.apache.log4j.PatternLayout | 可以灵活地指定布局模式 |
org.apache.log4j.SimpleLayout | 包含日志信息的级别和信息字符串 |
org.apache.log4j.TTCCLayout | 包含日志产生的时间、线程、类别等等信息 |
c. 格式化日志信息
采用类似C语言中的printf函数的打印格式格式化日志信息
形式 | 描述 |
---|---|
%d | 输出日志时间点的日期或时间,可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS} |
%t | 输出产生该日志事件的线程名 |
%p | 优先级 DEBUG/INFO/ERROR |
%c | 所属类的全名(包括包名) |
%l | 发生的位置,在某个类的某行 |
%m | 输出代码中指定的讯息,如log(message)中的message |
%n | 输出一个换行符号 |
案例
案例使用如下的配置信息:
### set log levels ###
log4j.rootLogger = DEBUG,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=[%d{yy/MM/dd HH:mm:ss:SSS}]-%l:%m%n
### 输出到日志文件 ###
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=${project}src\\main\\resources\\app.log
log4j.appender.File.MaxFileSize=10MB
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
3. 使用Log4j
public class UserMapperTest {
public static final Logger log = Logger.getLogger(UserMapperTest.class);
@Test
public void test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
log.debug("debug----sw");
log.error("error----sw");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}