01.Log4j简介
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。我们可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
GUI组件:GUI的意思 就是图形用户界面 ,是java 界面布局方面的知识,主要用到了 Java的swing包和awt包
UNIX Syslog:UNIX系统的Syslog机制
02.Log4j组成部分
Log4j由三部分组成:日志记录器(Loggers)输出端(Appenders)日志格式化器(Layout)
日志记录器Logger:控制启用或者禁用哪些日志记录语句,并且对日志进行级别限制
输出端(Appenders):指定将日志打印在控制台还是在文件中
日志格式化器:控制日志信息的打印格式
03.Logger
3.1 获取一个Logger对象
Logger logger=Logger.getLogger(xxx.class);
Logger被指定为实体,由一个String类的名字识别。Logger的名字是大小写敏感的,且名字之间具有继承关系,子名用父名作为前缀,用点“.”分隔,例如x.y是x.y.z的父亲
root Logger(根Logger)是所有Logger的祖先,它有如下属性:
1.它总是存在的。
2.它不可以通过名字获得。
root Logger可以通过以下语句获得:
public static Logger Logger.getRootLogger();
public static Logger Logger.getLogger(Class clazz)
04.日志级别
日志级别用来控制日志的输出,级别从高到低分为:
Off | 最高等级,用于关闭所有日志记录 |
Fatal | 指出每个严重的错误事件将会导致应用程序的退出 |
Error | 指出虽然发生的错误事件,但仍然不影响系统的继续运行 |
Warm | 表明会出现潜在的错误情形 |
Info | 一般用于在粗粒度级别上,强调应用程序的运行过程 |
Debug | 一般用于在精粒度级别上,对调试应用程序非常有帮助 |
All | 最低等级,用于打开所有日志记录 |
这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出
测试:
创建一个Java工程,在工程下创建一个lib包,将Log4j所需要的Jar包复制到lib包中,然后右键jar包Build Path-->Add to Build Path
创建测试类进行测试级别
05.输出端Appender
Appender用来指定日志信息输出的位置,如控制台,文件等,可以同时指定多个输出目的地,Log4j允许将信息输出到许多不同的输出设备中,一个log信息输出目的地就叫做一个Appender
每个Logger都可以拥有一个或多个Appender,每个Appender表示一个日志的输出目的地。可以使用Logger.addAppender(Appender app)为Logger增加一个Appender,也可以使用Logger.removeAppender(Appender app)为Logger删除一个Appender。
Log4j常用输出位置:
org.apache.log4j.ConsoleAppender | 将日志信息输出到控制台 |
org.apache.log4j.FileAppender | 将日志信息输出到一个文件 |
org.apache.log4j.DailyRollingFileAppender | 将日志信息输出到一个日志文件,并且每天输出到一个新的日志文件 |
org.apache.log4j.RollingFileAppender | 将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件 |
org.apache.log4j.WriteAppender | 将日志信息以流格式发送到任意指定地方 |
org.apache.log4j.jdbc.JDBCAppender | 通过JDBC把日志信息输出到数据库中 |
06.日志格式化器Layout
日志格式化器分为三种:
HTMLLayout | 格式化日志输出为HTML表格形式 |
SimpleLayout | 以一种非常简单的方式格式化日志输出,它打印三项内容:级别-信息 |
PatternLayout | 根据指定的转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转化模式格式 |
案例:
使用FileAppender指定日志输出文件
使用SimpleLayout指定日志格式
效果图:
08.Log4net各种Appender配置:
http://www.cnblogs.com/anderslly/archive/2007/03/09/log4netconfigsamples.html
07.Log4j的配置
配置Log4j环境就是指配置root Logger,包括把Logger为哪个级别,为它增加哪些Appender,以及为这些Appender设置Layout,等等。因为所有其他的Logger都是root Logger的后代,所以它们都继承了root Logger的性质。这些可以通过设置系统属性的方法来隐式地完成,也可以在程序中调用XXXConfigurator.configure()方法来显式地完成。有以下几种方式来配置Log4j
A:配置放在文件里,通过环境变量传递文件名等信息,利用Log4j默认的初始化过程解析并配置
B:配置放在文件里,通过应用服务器配置传递文件甸等信息,利用一个特定的Servlet来完成配置
C:在程序中调用BasicConfigor.configure()方法。
D:配置放在文件里,通过命令行PropertyConfigurator.configure(args[])解析log4j.properties文件并配置Log4j
7.1 BasicConfigurator.configure()方法
它使用简单的方法配置Log4j环境。这个方法完成的任务是:
1:用默认的方式创建PatternLayout对象p:
PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x-%m%n");
2:用p创建ConsoleAppender对象a,目标是System.out,标准输出设备:
ConsoleAppender a = new CpnsoleAppender(p,ConsoleAppender.SYSTEM_OUT);
3:为root Logger增加一个ConsoleAppender p;
rootLogger.addAppender(p);
4:把rootLogger的log level设置为DUBUG级别;
rootLogger.setLevel(Level.DEBUG);
7.2 PropertyConfigurator.configure()方法
使用如下语句生成logger对象时:
static Logger logger=Logger.getLogger(“xxx.class”);
如果没有调用BasicConfigurator.configure()
PropertyConfigurator.configure()
DOMConfigurator.configure()
方法时,Log4j会自动加载CLASSPATH下名为log4j.properties的配置文件。如果把此配置文件改为其他名字,例如my.properties,程序虽然仍能运行,但会报出不能正确初始化Log4j系统的提示。这时可以在程序中加上
PropertyConfigurator.configure("classes/my.properties");
08.Log4j.propperties配置文件
https://www.cnblogs.com/tanshaoxiaoji/p/log4j_config.html
09.Tomcat中如何使用log4j打印log
![](https://i-blog.csdnimg.cn/blog_migrate/350fd6418257c001dd0d75aabe431aae.png)