Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。
A).Logger对象的获得或创建:
Logger被指定为实体,由一个String类的名字识别。Logger的名字是大小写敏感的,且名字之间具有继承关系,子名用父名作为前缀,用点“.”分隔,例如x.y是x.y.z的父亲。
root Logger(根Logger)是所有Logger的祖先,它有如下属性:
1.它总是存在的。
2.它不可以通过名字获得。
B)日志级别
每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:
A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。
C)输出端Appender
Appender用来指定日志信息输出到哪个地方,可以同时指定多个输出目的地。Log4j允许将信息输出到许多不同的输出设备中,一个log信息输出目的地就叫做一个Appender。
每个Logger都可以拥有一个或多个Appender,每个Appender表示一个日志的输出目的地。可以使用Logger.addAppender(Appender app)为Logger增加一个Appender,也可以使用Logger.removeAppender(Appender app)为Logger删除一个Appender。
以下为Log4j几种常用的输出目的地。
a:org.apache.log4j.ConsoleAppender:将日志信息输出到控制台。
b:org.apache.log4j.FileAppender:将日志信息输出到一个文件。
c:org.apache.log4j.DailyRollingFileAppender:将日志信息输出到一个日志文件,并且每天输出到一个新的日志文件。
d:org.apache.log4j.RollingFileAppender:将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。
e:org.apache.log4j.WriteAppender:将日志信息以流格式发送到任意指定地方。
f::org.apache.log4j.jdbc.JDBCAppender:通过JDBC把日志信息输出到数据库中。
最后,创建一个Log类,将下面的代码复制进去运行即可查看到在C盘下会生成日志文件
import org.apache.log4j.Logger;
public class Log {
private static Logger logger = Logger.getLogger(Log.class);
public static void main(String[] args) {
// 记录 debug 级别的信息
logger.debug("This is debug message.");
// 记录 info 级别的信息
logger.info("This is info message.");
// 记录 error 级别的信息
logger.error("This is error message.");
}
}
补充1:
Log4j 根配置语法
log4j.rootLogger = [ level ] , appenderName, appenderName, …
把指定级别以上的日志信息输出到指定的一个或者多个位置
我们把INFO层级以及以上的信息输出到Console和File;
即输出到控制台和本地硬盘文件
1
2
3
4
5
6
7
8
9
10
11
12
|
log4j.rootLogger=INFO, Console ,File
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#File
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = d://log4j2.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
|
代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
class
Demo {
private
static
Logger logger=Logger.getLogger(Demo.
class
);
// 获取logger实例
public
static
void
main(String[] args) {
logger.info(
"普通Info信息"
);
logger.debug(
"调试debug信息"
);
logger.error(
"错误error信息"
);
logger.warn(
"警告warn信息"
);
logger.fatal(
"严重错误fatal信息"
);
//开发中有可能会遇到一下经典异常
logger.error(
"错误了"
,
new
IllegalArgumentException(
"非法参数异常"
));
}
}
|
运行如图:
我们再来看日志等级
Log4j根据日志信息的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
Log4j官方建议实际实用的话,Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG
所以上面我们制定INFO后debug级别的就不再输出了
同理我们定义ERROR级别
那么ERROR以上级别才会输出
运行如下图: