引:一直都知道日志文件很重要,可以记录一些相关信息,但是可能是程序需要调试的内容太少,也或者是项目太小,所以看看控制台的信息就够了,但是这次接触的项目越来越大,控制台额信息越来越多,经常会看不到自己想要看到的信息时,这个时候使用日志就发现十分得有必要了!
日志的好处
- 方便调试(如上)
- 方便发现系统运行中的错误
- 存储业务数据,便于日后分析
日志实现方式
- 自己实现类通过io存储到文件中
- 使用log4j将日志输入到控制台,文本文件,一集数据库中。
- 使用jdk自带的logging.jar包中方法(同一作者还有lognback)
- 使用slfj,它提供了上述两种方法的接口。
日志的输出(以log4j为例)
- 输入到控制台
运行程序:1
2
3
4
5
6
7
8
9
10
11public class LoggerTest {
public static Logger logger1 = Logger.getLogger(LoggerTest.class);
public static void main(String[] args) {
logger1.trace("我是logger1,trace");
logger1.debug("我是logger1,debug");
logger1.info("我是logger1,info");
logger1.warn("我是logger1,warn");
logger1.error("我是logger1,error");
logger1.fatal("我是logger1,fatal");
}
}
配置文件如下:1
2
3
4
5
6
7
8
9### 设置级别和目的地(这里多个目的地) ###
log4j.rootLogger = DEBUG,CONSOLE
### 这里的com.todorex是包,也就是在这个包记录日志时,是只记录debug及以上级别的日志
log4j.logger.com.todorex=DEBUG
### 输出到控制台 ###
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{ABSOLUTE} %5p %c{1}:%L - %m%n
控制台输出:1
2
3
4
511:35:09,969 DEBUG LoggerTest:12 [main:0]- 我是logger1,debug
11:35:09,972 INFO LoggerTest:13 [main:3]- 我是logger1,info
11:35:09,972 WARN LoggerTest:14 [main:3]- 我是logger1,warn
11:35:09,972 ERROR LoggerTest:15 [main:3]- 我是logger1,error
11:35:09,972 FATAL LoggerTest:16 [main:3]- 我是logger1,fatal
- 输入到日志文件
运行程序同上;
配置文件如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20### 设置级别和目的地(这里可以多个目的地) ###
log4j.rootLogger = trace,demoLog
log4j.logger.com.todorex=DEBUG
### 输出到控制台 ###
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{ABSOLUTE} %5p %c{1}:%L [%t:%r]- %m%n
### 输出到日志文件(文件目录一定要是绝对路径且存在) ###
log4j.appender.demoLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.demoLog.File =/var/alldata/mylog.log
log4j.appender.demoLog.Append = true
## 只输出DEBUG级别以上的日志
log4j.appender.demoLog.Threshold = DEBUG
#'.'yyyy-MM-dd: 每天产生一个新的文件
log4j.appender.demoLog.DatePattern = '.'yyyy-MM-dd
log4j.appender.demoLog.layout = org.apache.log4j.PatternLayout
log4j.appender.demoLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n
文件内容同控制台输出,但是却比控制台清楚得多,不会被乱七八糟的信息给遮盖。
- 输入到数据库
运行程序:1
2
3
4
5
6
7public class LoggerTest {
public static void main(String[] args) {
Logger logger = Logger.getLogger(LoggerTest.class);
logger.info("good");
logger.debug("success");
}
}
配置文件:1
2
3
4
5
6
7
8
9
10
11log4j.rootLogger=trace,CONSOLE,demoLog
# com.todorex包下面所有的日志输出的级别设为DEBUG
log4j.logger.com.todorex=DEBUG
# 数据库输出
log4j.appender.demoLog=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.demoLog.driver=com.mysql.jdbc.Driver
log4j.appender.demoLog.URL=jdbc:mysql://127.0.0.1:3306/test
log4j.appender.demoLog.user=root
log4j.appender.demoLog.password=root
# 在数据库对应的位置建一个对应的log表
log4j.appender.demoLog.sql=insert into log(level,category,thread,time,location,note) values('%p','%c','%t','%d{yyyy-MM-dd HH:mm:ss:SSS}','%l','%m')
数据库的具体内容就不贴出来了,和普通看到的一样。
总结
其实日志用几次就知道它的好了,自己也是在慢慢学习!