Log4J的使用
log4j是用来记录日志的
软件的运行过程离不开日志,日志主要用来记录系统运行过程中的一些重要的操作信息,便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者根据日志找到发生故障的原因。
日志根据记录内容的不同,主要分为3类:
1. SQL日志:记录系统执行的SQL语句。
2. 异常日志:记录系统运行过程中发生的异常事件。
3. 业务日志:记录系统运行过程,如用户登录,操作记录。
log4j具有7种级别
- DEBUG Level: 指出细粒度信息事件对调试应用程序是非常有帮助的,就是输出debug的信息.
- INFO level: 表明消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息.
- WARN level: 表明会出现潜在错误的情形,就是显示警告信息.
- ERROR level: 指出虽然发生错误事件,但仍然不影响系统的继续运行.就是显示错误信息.
- FATAL level: 指出每个严重的错误事件将会导致应用程序的退出.
- ALL level: 是最低等级的,用于打开所有日志记录.
- OFF level: 是最高等级的,用于关闭所有日志记录.
日志记录器(Logger)的行为是分等级的:
优先级从高到低分别是OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。
log4j.properties 的配置
首先要创建 log4j.properties 文件
log4j.rootLogger 配置语法为:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
- level:是最小优先级配置,小于高级别的日志信息不会被打印出来。
- appenderName:是指定日志输出到哪些地方,可以同时指定多个输出目的地。
例如:
log4j.rootLogger = info , A1,B2,C3
配置了3个输出地方,这个名字可以任意,但必须与我们后面进行设置的名字相对应。
log4j.appender 相关,表示:
日志输出目的地,负责日志的输出 (输出到什么 地方)
例如:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=L.log
将日志输出到控制台和L.log文件中。
Appender可以控制日志的输出的目的地,一个输出源就叫一个Appender,appender的类别有:Console(控制台)File(文件)JDBC、JMS等等。
完整的 log4j.properties 配置:
log4j.rootLogger=debug, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=L.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n
日志输出布局:
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l
- %c 类的全名,如pers.hanchao.hespringmvc.log4j.App
- %d 时间,如2018-01-19 22:23:29,899;可以通过{}指定格式,如%d{yyyy-MM-dd},输出为2018-01-19
- %l 类路径(精确到行),如pers.hanchao.hespringmvc.log4j.App.main(App.java:13)
- %m 即日志信息本身,如致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。
- %n 回车换行
- %p 打印当前日志的日志级别,如:LOGGER.fatal(“致命错误”);的日志级别为FATAL
- %r 输出自应用启动到输出该日志信息所耗费的毫秒数
- %t 输出产生该日志事件的线程名,如main
####LogTest.class
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogTest
{
public static Logger logger = Logger.getLogger(LogTest.class);
public static void main( String[] args )
{
PropertyConfigurator.configure("src/log4j.properties");
//BasicConfigurator.configure();
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}
日志会输出到控制台和文件中。
log4j功能十分强大,每种功能对应着不同的配置(如定时输出日志功能),以后继续补充。