下载地址:
https://mvnrepository.com/artifact/log4j/log4j
log4j第一个测试
1.创建java项目
2.新建lib,导入log4j-1.2.17.jar包,添加库
3.新建log4jText测试类:
package log4j;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* @author lenovo
*/
public class Log4jTest {
/**
* 基于类的名称获取日志对象
*
*/
static Logger logger = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) throws InterruptedException {
// 进行默认配置
BasicConfigurator.configure();
// 设置日志输出级别
logger.setLevel(Level.DEBUG);
// 进行不同级别的日志输出
logger.trace("跟踪信息");
logger.debug("调试信息");
logger.info("输出信息");
Thread.sleep(1000);
logger.warn("警告信息");
logger.error("错误信息");
logger.fatal("致命信息");
}
}
4.测试结果:
0 [main] DEBUG log4j.Log4jTest - 调试信息
2 [main] INFO log4j.Log4jTest - 输出信息
1003 [main] WARN log4j.Log4jTest - 警告信息
1003 [main] ERROR log4j.Log4jTest - 错误信息
1003 [main] FATAL log4j.Log4jTest - 致命信息
进程已结束,退出代码 0
5.在src目录下,配置log4j.properties
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
6.运行测试类:
package log4j;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* @author lenovo
*/
public class Log4jTest {
/**
* 基于类的名称获取日志对象
*
*/
static Logger logger = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) throws InterruptedException {
// 进行默认配置
BasicConfigurator.configure();
// 设置日志输出级别
logger.setLevel(Level.DEBUG);
// 进行不同级别的日志输出
logger.trace("跟踪信息");
logger.debug("调试信息");
logger.info("输出信息");
Thread.sleep(1000);
logger.warn("警告信息");
logger.error("错误信息");
logger.fatal("致命信息");
}
}
7.结果输出:
DEBUG [main] (Log4jTest.java:23) - 调试信息
0 [main] DEBUG log4j.Log4jTest - 调试信息
INFO [main] (Log4jTest.java:24) - 输出信息
4 [main] INFO log4j.Log4jTest - 输出信息
WARN [main] (Log4jTest.java:26) - 警告信息
1005 [main] WARN log4j.Log4jTest - 警告信息
ERROR [main] (Log4jTest.java:27) - 错误信息
1005 [main] ERROR log4j.Log4jTest - 错误信息
FATAL [main] (Log4jTest.java:28) - 致命信息
1005 [main] FATAL log4j.Log4jTest - 致命信息
进程已结束,退出代码 0
log4j:配制详解
.配置log4j.properties
1.配置log4j.properties
#设置日志输出的等级为debug,低于debug就不会输出了
#设置日志输出到两种地方,分别叫做 stdout和 R
log4j.rootLogger=debug, stdout, R
#第一个地方stdout, 输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#可以灵活地指定布局的模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
#stdout输出格式是 %5p [%t] (%F:%L) - %m%n
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
#第二个地方R, 以滚动的方式输出到文件,文件名是example.log,文件最大100k, 最多滚动5个文件
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
#输出格式是 %p %t %c - %m%n
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
#log4j日志输出格式一览:
#%c 输出日志信息所属的类的全名
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },
# 输出类似:2002-10-18- 22:10:28
#%f 输出日志信息所属的类的类名
#%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
#%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的优先等级 线程名称 (文件名:行号) - 信息 回车换行
2.创建测试类:TestLog4j
package log4j;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
* @author lenovo
*/
public class TestLog4j {
static Logger logger = Logger.getLogger(TestLog4j.class);
public static void main(String[] args) throws InterruptedException {
// 采用指定配置文件
PropertyConfigurator.configure("D:\\java-spring学习\\log4j\\src\\log4j.properties");
for (int i = 0; i < 5; i++) {
logger.trace("跟踪信息");
logger.debug("调试信息");
logger.info("输出信息");
logger.warn("警告信息");
logger.error("错误信息");
logger.fatal("致命信息");
}
}
}
3.测试类输出:
结果:
DEBUG [main] (TestLog4j.java:16) - 调试信息
INFO [main] (TestLog4j.java:17) - 输出信息
WARN [main] (TestLog4j.java:18) - 警告信息
ERROR [main] (TestLog4j.java:19) - 错误信息
FATAL [main] (TestLog4j.java:20) - 致命信息
DEBUG [main] (TestLog4j.java:16) - 调试信息
INFO [main] (TestLog4j.java:17) - 输出信息
WARN [main] (TestLog4j.java:18) - 警告信息
ERROR [main] (TestLog4j.java:19) - 错误信息
FATAL [main] (TestLog4j.java:20) - 致命信息
DEBUG [main] (TestLog4j.java:16) - 调试信息
INFO [main] (TestLog4j.java:17) - 输出信息
WARN [main] (TestLog4j.java:18) - 警告信息
ERROR [main] (TestLog4j.java:19) - 错误信息
FATAL [main] (TestLog4j.java:20) - 致命信息
DEBUG [main] (TestLog4j.java:16) - 调试信息
INFO [main] (TestLog4j.java:17) - 输出信息
WARN [main] (TestLog4j.java:18) - 警告信息
ERROR [main] (TestLog4j.java:19) - 错误信息
FATAL [main] (TestLog4j.java:20) - 致命信息
DEBUG [main] (TestLog4j.java:16) - 调试信息
INFO [main] (TestLog4j.java:17) - 输出信息
WARN [main] (TestLog4j.java:18) - 警告信息
ERROR [main] (TestLog4j.java:19) - 错误信息
FATAL [main] (TestLog4j.java:20) - 致命信息
进程已结束,退出代码 0
配制log4j.xml
1.配制log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/>
</layout>
</appender>
<!-- specify the logging level for loggers from other libraries -->
<logger name="com.opensymphony">
<level value="ERROR" />
</logger>
<logger name="org.apache">
<level value="ERROR" />
</logger>
<logger name="org.hibernate">
<level value="ERROR" />
</logger>
<!-- for all other loggers log only debug and above log messages -->
<root>
<priority value="ERROR"/>
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
2.创建测试类: Log4jXmlTest
package log4j;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
* @author lenovo
*/
public class Log4jXmlTest {
static Logger logger = Logger.getLogger(TestLog4j.class);
public static void main(String[] args) throws InterruptedException {
PropertyConfigurator.configure("D:\\java-spring学习\\log4j\\src\\log4j.xml");
for (int i = 0; i < 5; i++) {
logger.trace("跟踪信息");
logger.debug("调试信息");
logger.info("输出信息");
logger.warn("警告信息");
logger.error("错误信息");
logger.fatal("致命信息");
}
}
}
3.测试类输出:
结果:
2020-05-10 18:27:23,937 ERROR log4j.TestLog4j.main:18 - 错误信息
2020-05-10 18:27:23,939 FATAL log4j.TestLog4j.main:19 - 致命信息
2020-05-10 18:27:23,939 ERROR log4j.TestLog4j.main:18 - 错误信息
2020-05-10 18:27:23,939 FATAL log4j.TestLog4j.main:19 - 致命信息
2020-05-10 18:27:23,940 ERROR log4j.TestLog4j.main:18 - 错误信息
2020-05-10 18:27:23,940 FATAL log4j.TestLog4j.main:19 - 致命信息
2020-05-10 18:27:23,940 ERROR log4j.TestLog4j.main:18 - 错误信息
2020-05-10 18:27:23,940 FATAL log4j.TestLog4j.main:19 - 致命信息
2020-05-10 18:27:23,942 ERROR log4j.TestLog4j.main:18 - 错误信息
2020-05-10 18:27:23,942 FATAL log4j.TestLog4j.main:19 - 致命信息
log4j.rootLogger=DEBUG, stdout” 指的是日志输出级别,一共有 7 个级别(OFF、 FATAL、 ERROR、 WARN、 INFO、 DEBUG、 ALL)。
一般常用的日志输出级别分别为 DEBUG、 INFO、 ERROR 以及 WARN,分别表示 “调试级别”、 “标准信息级别”、 “错误级别”、 “异常级别”。如果需要查看程序运行的详细步骤信息,一般选择 “DEBUG” 级别,因为该级别在程序运行期间,会在控制台才打印出底层的运行信息,以及在程序中使用 Log 对象打印出调试信息。
如果是日常的运行,选择 “INFO” 级别,该级别会在控制台打印出程序运行的主要步骤信息。“ERROR” 和 “WARN” 级别分别代表 “不影响程序运行的错误事件” 和 “潜在的错误情形”。
文件中 “stdout” 这段配置的意思就是将 DEBUG 的日志信息输出到 stdout 参数所指定的输出载体中。
“log4j.appender.stdout=org.apache.log4j.ConsoleAppender” 的含义是,设置名为 stdout 的输出端载体是哪种类型。
目前输出载体有
ConsoleAppender(控制台)
FileAppender(文件)
DailyRollingFileAppender(每天产生一个日志文件)
RollingFileAppender(文件大小到达指定大小时产生一个新的文件)
WriterAppender(将日志信息以流格式发送到任意指定的地方)
这里要将日志打印到 IDEA 的控制台,所以选择 ConsoleAppender
“log4j.appender.stdout.layout=org.apache.log4j.PatternLayout” 的含义是,名为 stdout 的输出载体的 layout(即界面布局)是哪种类型。
目前输出端的界面类型分为
HTMLLayout(以 HTML 表格形式布局)
PatternLayout(可以灵活地指定布局模式)
SimpleLayout(包含日志信息的级别和信息字符串)
TTCCLayout(包含日志产生的时间、线程、类别等信息)
这里选择灵活指定其布局类型,即自己去配置布局。
“log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n” 的含义是,如果 layout 界面布局选择了 PatternLayout 灵活布局类型,要指定的打印信息的具体格式。
格式信息配置元素大致如下:
%m 输出代码中的指定的信息
%p 输出优先级,即 DEBUG、 INFO、 WARN、 ERROR 和 FATAL
%r 输出自应用启动到输出该 log 信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows 平台为 “rn”,UNIX 平台为 “n”
%d 输出日志时的时间或日期,默认个事为 ISO8601,也可以在其后指定格式,比如 %d{yyy MMM dd HH:mm:ss},输出类似:2018 年 4 月18 日 10:32:00
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
总结:log4j日志配置:有2中方式,xml和properties2中方式.