目录
一.使用JDK Logging
1.日志Logging
- 日志是为了替代System.out.println(),可以定义格式,重定向到文件等
- 日志可以存档,便于追踪问题
- 日志记录可以按级别分类,便于打开或关闭某些级别
- 可以根据配置文件调整日志,无需修改代码
JDK提供了Logging:java.util.logging
JDK Logging定义了7个日志级别:
SEVERE
WARNING
INFO(默认级别)
CONFIG
FINE
FINER
FINEST
JDK Logging的局限:
- JVM启动时读取配置文件并完成初始化
- JVM启动后无法修改配置
- 需要在JVM启动时传递参数-Djava.util.logging.config.file=config-file-name
二.使用Commons Logging
1.Commons Logging
- Commons Logging是Apache创建的日志系统:
- Commons Logging是使用最广泛的日志模块
- Commons Logging的API非常简单
- Commons Logging可以自动使用其他日志模块
2.Commons Logging定义了6个日志级别:
FATAL
ERROR
WARNING
INFO(默认级别)
DEBUG
TRACE
在Eclipse中引入jar包:
Project -> Property -> Java Build Path -> Libraries -> Add Jars...
初始化Log对象:
final Log log = LogFactory.getLog(getClass());
文档:http://commons.apache.org/proper/commons-logging/
三.使用Log4j
官网:http://logging.apache.org/log4j/
1.Log4j的概念:
Appender:日志输出目的地
Layout:日志输出格式
2. 在Commons Logging 中使用Log4j:
- 通过Commons Logging实现日志,不需要修改代码即可使用Log4j
- 使用Log4j只需要把log4j2.xml和相关jar放入classpath
- 如果要更换Log4j,只需要移除log4j2.xml和相关jar
- 只有扩展Log4j时,才需要引用Log4j的接口
3.Log4j 配置解释
日志信息的优先级从高到低有OFF ERROR、WARN、 INFO、DEBUG,ALL若果设置成INFO则不会输出debug的信息
#总体设置日志
log4j.rootLogger=DEBUG,logfile #所有日志以DEBUG级别logfile(日志文件)方式输出
log4j.logger.com.userPackage=DEBUG,stdout,Logfile #com.userPackage包下所有日志以DEBUG级别stdout(控制台)方式和proLogfile(日志文件)方式输出
其中,Log4j提供的appender(即日志输出的目的地)有以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
其中,Log4j提供的layout(即日志输出的格式)有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
log4j.appender.appenderName.layout.optionN = valueN
Log4j日志输出格式一览:
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行.举例:Testlog4.main(TestLog4.java:10)
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
所以:
%5p [%t] (%F:%L) - %m%n 就表示
宽度是5的优先等级 线程名称 (文件名:行号) - 信息 回车换行,例如:
以下是对输出到控制台中的设置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender #输出到控制台(stdout即控制台)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #按照制定格式输出信息
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n #输出格式
以下是对输出到单个文件中的设置
log4j.appender.LogfileName=org.apache.log4j.FileAppender #日志输出到单文件(LogfileName)
log4j.appender.LogfileName.File=logs/programmer.log #输出目的-文件地址
log4j.appender.LogfileName.layout=org.apache.log4j.PatternLayout #按照制定格式输出信息
log4j.appender.simpleLogfile.layout.ConversionPattern=%d %p [%c] - %m%n #输出格式
#日志输出到多个文件(logfile)
log4j.appender.LogfileName=org.apache.log4j.RollingFileAppender #输出方式-多个文件,文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.LogfileName.maxBackupIndex=8 #最大文件数
log4j.appender.LogfileName.maxFileSize=2097152 #每个文件最大长度(1024为1K,所以1024*1024*2=2097152为2M)
log4j.appender.LogfileName.File=logs/sysyem.log #输出目的-文件地址
log4j.appender.LogfileName.layout=org.apache.log4j.PatternLayout #按照制定格式输出输出格式
log4j.appender.LogfileName.layout.ConversionPattern=%d %p [%c] - %m%n #设置日志的输出格式
#日志输出到日志文件,每天生成一个日志文件
log4j.appender.LogfileName = org.apache.log4j.DailyRollingFileAppender #输出方式-输出到日志文件-每天产生一个日志文件
log4j.appender.LogfileName.File = ${webapp.root}/WEB-INF/etc/log #输出日志的文件位置
log4j.appender.LogfileName.DatePattern='_'yyyy-MM-dd'.log' #每天产生一个新的日志文件,以日期为日志文件名
log4j.appender.LogfileName.Append = true #将日志信息添加到日志文件中,如果是false 则是覆盖到日志文件中
log4j.appender.LogfileName.Threshold = ERROR #指定日志信息输出的最低层次
log4j.appender.LogfileName.layout = org.apache.log4j.PatternLayout #按照制定格式输出输出格式
log4j.appender.LogfileName.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n #设置日志输出格式
4.Log4j 常用配置文件
log4j.rootLogger=debug, stdout,LogfileName
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
#输出方式-输出到日志文件-每天产生一个日志文件
log4j.appender.LogfileName = org.apache.log4j.DailyRollingFileAppender
#输出日志的文件位置
log4j.appender.LogfileName.File = /Users/zhouzhenlin/Music/log
#每天产生一个新的日志文件,以日期为日志文件名
log4j.appender.LogfileName.DatePattern='_'yyyy-MM-dd'.log'
#将日志信息添加到日志文件中,如果是false 则是覆盖到日志文件中
log4j.appender.LogfileName.Append = true
#指定日志信息输出的最低层次
log4j.appender.LogfileName.Threshold = ERROR
#按照制定格式输出输出格式
log4j.appender.LogfileName.layout = org.apache.log4j.PatternLayout
#设置日志输出格式
log4j.appender.LogfileName.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
public class Main {
static Logger logger=Logger.getLogger(Main.class);
public static void main(String[] args){
logger.trace("所有信息");
logger.debug("调试信息");
logger.info("输出信息");
logger.warn("警告信息");
logger.error("错误信息");
}
}
参考:https://blog.csdn.net/lduzhenlin/article/details/89147904