log4j
计算机知识思维导图:log4j。网页展示前三层结构,可在线查看完整脑图并下载 GoMind 文件。
2026-08-25
## log4j ### log4j #### main 测试 ##### 加载配置文件 ##### 加载java.util.Properties ##### show log #### 日志信息配置 ##### 基础日志log4j.rootLogger ##### 分包日志log4j.logger ##### appender ##### 扩展 #### 材料 ##### log4j 2 ##### log4j的ConversionPattern参数的意义 > 仅展示前三层结构;请在线查看完整脑图或下载 GoMind 文件。
log4j
log4j
log4j.properties
加载配置文件
/**
* log4j 加载文件初始化
*/
public static void log4jLoaderFileInit() {
// 准备log4j配置文件
String filePath = System.getProperty("user.dir") + "/webapp/WEB-INF/log4j.properties";
System.out.println(filePath);
// 加载log4j配置
PropertyConfigurator.configure(filePath);
}加载java.util.Properties
/**
* log4j 自定义初始化
*/
public static Properties log4jCustomInit() {
// 准备log4j配置
Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "DEBUG, CONSOLE");
prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n");
// 加载log4j配置
PropertyConfigurator.configure(prop);
return prop;
}show log
/**
* 测试显示日志
*/
public static void log4jShowLog() {
logger.debug("Start of the main() in TestLog4j");
logger.info("Just testing a log message with priority set to INFO");
logger.warn("Just testing a log message with priority set to WARN");
logger.error("Just testing a log message with priority set to ERROR");
logger.fatal("Just testing a log message with priority set to FATAL");
logger.log(Priority.WARN, "Testing a log message use a alternate form");
}main 测试
package test;
import java.net.URISyntaxException;
import java.util.Properties;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.Priority;
import org.apache.log4j.PropertyConfigurator;
/**
*
* @author liuxiang@wosaitech.com
* @creation 2015年8月21日
*/
public class Test {
private static Logger logger = LogManager.getLogger(Test.class);
/**
* log4j 加载文件初始化
*/
public static void log4jLoaderFileInit() {
// 准备log4j配置文件
String filePath = System.getProperty("user.dir") + "/webapp/WEB-INF/log4j.properties";
System.out.println(filePath);
// 加载log4j配置
PropertyConfigurator.configure(filePath);
}
/**
* log4j 自定义初始化
*/
public static Properties log4jCustomInit() {
// 准备log4j配置
Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "DEBUG, CONSOLE");
prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "%d %-5p [%C.%M] (%F:%L) %3x - %m%n");
// 加载log4j配置
PropertyConfigurator.configure(prop);
return prop;
}
/**
* 测试显示日志
*/
public static void log4jShowLog() {
logger.debug("Start of the main() in TestLog4j");
logger.info("Just testing a log message with priority set to INFO");
logger.warn("Just testing a log message with priority set to WARN");
logger.error("Just testing a log message with priority set to ERROR");
logger.fatal("Just testing a log message with priority set to FATAL");
logger.log(Priority.WARN, "Testing a log message use a alternate form");
}
public static void main(String[] args) throws URISyntaxException {
// log4jLoaderFileInit();// log4j 加载文件初始化
Properties prop = log4jCustomInit();// log4j 自定义初始化
log4jShowLog();// 输入日志测试
// 修改日志格式
prop.setProperty("log4j.rootLogger", "fatal, CONSOLE");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "%d %-5p [%C.%M()] (%F:%L) %3x - %m%n");
// 2015-11-16 13:22:54,149 FATAL [test.Test.log4jShowLog] (Test.java:55) - Just testing a log message with priority set to FATAL
PropertyConfigurator.configure(prop);
log4jShowLog();// 输入日志测试
prop.setProperty("log4j.rootLogger", "fatal, CONSOLE");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "%d %-5p [%c] (%F:%L) %3x - %m%n");
// 2015-11-16 13:22:54,154 FATAL [test.Test] (Test.java:55) - Just testing a log message with priority set to FATAL
PropertyConfigurator.configure(prop);
log4jShowLog();// 输入日志测试
}
}
// -X: X信息输出时左对齐
// %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
// %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd
// HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921
// %r: 输出自应用启动到输出该log信息耗费的毫秒数
// %c: 输出日志信息所属的类目,通常就是所在类的全名
// %t: 输出产生该日志事件的线程名
// %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。
// %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
// %%: 输出一个"%"字符
// %F: 输出日志消息产生时所在的文件名称
// %L: 输出代码中的行号
// %m: 输出代码中指定的消息,产生的日志具体信息
// %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
//
// 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
// 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
// 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
// 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
// 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉log4j.rootLogger=WARN,Console,File
log4j.rootLogger = <级别>,[appenderName]
基础日志log4j.rootLogger
log4j.logger.com.wosai.teach=debug,console
log4j.logger.com.wosai.teach.core=debug,core
log4j.logger.[包地址] = <级别>,[appenderName]
分包日志log4j.logger
org.apache.log4j.ConsoleAppender
Threshold=info
Target=System.out
Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Threshold=info log4j.appender.Console.Target=System.out log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[k12Platform] %d %-5p [%C.%M()] (%F:%L) %3x - %m%n
org.apache.log4j.RollingFileAppender
Threshold=error
File=${project}WEB-INF/logs/app.log
File
# log4j-appender File
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.Append=true
#log4j.appender.File.File=k12app.log
log4j.appender.File.File=${catalina.base}/logs/k12app.log
log4j.appender.File.Encoding=UTF-8
log4j.appender.File.Threshold=error
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[k12Platform] %d %-5p [%C.%M()] (%F:%L) %3x - %m%n
log4j.appender.File.MaxBackupIndex=10
log4j.appender.File.MaxFileSize=10MBcore
log4j.appender.test.MaxFileSize=10240KB
log4j.appender.test.MaxBackupIndex=2
最大10M,分2个循环文件
appender
[k12Platform] %d %-5p [%C.%M()] (%F:%L) %3x - %m%n
[k12Platform] 2015-11-16 15:15:16,933 FATAL [test.Test.log4jShowLog()] (Test.java:55) - Just testing a log message with priority set to FATAL
[k12Platform] 2015-11-16 15:15:16,933 FATAL [test.Test.log4jShowLog()] (Test.java:55) - Just testing a log message with priority set to FATAL
日志格式
扩展
日志信息配置
#level: DEBUG < INFO < WARN < ERROR < FATAL
# log4j-rootLogger,logger
log4j.rootLogger=debug,Console,File
log4j.logger.test=debug,Console
# log4j-appender Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Threshold=info
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[k12Platform] %d %-5p [%C.%M()] (%F:%L) %3x - %m%n
# log4j-appender File
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.Append=true
#log4j.appender.File.File=k12app.log
log4j.appender.File.File=${catalina.base}/logs/k12app.log
log4j.appender.File.Encoding=UTF-8
log4j.appender.File.Threshold=error
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[k12Platform] %d %-5p [%C.%M()] (%F:%L) %3x - %m%n
log4j.appender.File.MaxBackupIndex=10
log4j.appender.File.MaxFileSize=10MB
# ReadMe.md
## log4j的ConversionPattern参数的意义
#-X: X信息输出时左对齐
#%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
#%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921
#%r: 输出自应用启动到输出该log信息耗费的毫秒数
#%c: 输出日志信息所属的类目,通常就是所在类的全名
#%t: 输出产生该日志事件的线程名
#%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。
#%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
#%%: 输出一个"%"字符
#%F: 输出日志消息产生时所在的文件名称
#%L: 输出代码中的行号
#%m: 输出代码中指定的消息,产生的日志具体信息
#%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
## 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
#1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
#2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
#3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
#4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉Log4j 2 介绍
Log4j2使用总结
log4j 2
log4j的ConversionPattern参数的意义
-X: X信息输出时左对齐
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉材料