Java日志那些事

引:一直都知道日志文件很重要,可以记录一些相关信息,但是可能是程序需要调试的内容太少,也或者是项目太小,所以看看控制台的信息就够了,但是这次接触的项目越来越大,控制台额信息越来越多,经常会看不到自己想要看到的信息时,这个时候使用日志就发现十分得有必要了!

日志的好处

  1. 方便调试(如上)
  2. 方便发现系统运行中的错误
  3. 存储业务数据,便于日后分析

日志实现方式

  1. 自己实现类通过io存储到文件中
  2. 使用log4j将日志输入到控制台,文本文件,一集数据库中。
  3. 使用jdk自带的logging.jar包中方法(同一作者还有lognback)
  4. 使用slfj,它提供了上述两种方法的接口。

日志的输出(以log4j为例)

  1. 输入到控制台

运行程序:

1
2
3
4
5
6
7
8
9
10
11
public 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
5
11: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. 输入到日志文件
    运行程序同上;
    配置文件如下:
    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. 输入到数据库

运行程序:

1
2
3
4
5
6
7
public 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
11
log4j.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')

数据库的具体内容就不贴出来了,和普通看到的一样。

总结

其实日志用几次就知道它的好了,自己也是在慢慢学习!