1.新建module,log4j-demo
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>log-study</artifactId>
<groupId>com.lxcourse</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>log4j-demo</artifactId>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.快速入门
package com.lxcourse.log4j;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Test;
/**
* @author doubledumbao
* 测试log4j
*/
public class Log4jDemo {
@Test
public void testQuick(){
//初始化配置信息,在入门案例中暂不使用配置文件
BasicConfigurator.configure();
Logger logger = Logger.getLogger(Log4jDemo.class);
logger.info("hello log4j");
//日志级别
logger.fatal("fatal"); //严重错误,一般会造成系统崩溃并终止运行
logger.error("error"); // 错误信息,不影响系统运行
logger.warn("warn"); // 警告信息,可能会发生问题
logger.info("info"); // 运行信息
logger.debug("debug"); // 调试信息
logger.trace("trace"); // 追踪信息,记录程序所有的流程信息
}
}
3.log4j.properties配置文件
log4j.rootLogger = trace,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.SimpleLayout
/**
* 配置文件log4j.properties
*/
@Test
public void testConfigFile(){
Logger logger = Logger.getLogger(Log4jDemo.class);
logger.info("hello log4j");
//日志级别
logger.fatal("fatal"); //严重错误,一般会造成系统崩溃并终止运行
logger.error("error"); // 错误信息,不影响系统运行
logger.warn("warn"); // 警告信息,可能会发生问题
logger.info("info"); // 运行信息
logger.debug("debug"); // 调试信息
logger.trace("trace"); // 追踪信息,记录程序所有的流程信息
}
4.开启log4j内置日志记录
/**
* 开启log4j内置日志记录
*/
@Test
public void testLogLog(){
//开启log4j内置日志记录
LogLog.setInternalDebugging(true);
Logger logger = Logger.getLogger(Log4jDemo.class);
logger.info("hello log4j");
//日志级别
logger.fatal("fatal"); //严重错误,一般会造成系统崩溃并终止运行
logger.error("error"); // 错误信息,不影响系统运行
logger.warn("warn"); // 警告信息,可能会发生问题
logger.info("info"); // 运行信息
logger.debug("debug"); // 调试信息
logger.trace("trace"); // 追踪信息,记录程序所有的流程信息
}
log4j.rootLogger = trace,console
# 指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#log4j.appender.console.layout = org.apache.log4j.SimpleLayout
#log4j.appender.console.layout = org.apache.log4j.HTMLLayout
#log4j.appender.console.layout = org.apache.log4j.xml.XMLLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
5.将日志输出到文件
/**
* 测试FileAppender
*/
@Test
public void testFileAppender(){
//开启log4j内置日志记录
LogLog.setInternalDebugging(true);
Logger logger = Logger.getLogger(Log4jDemo.class);
logger.info("hello log4j");
//日志级别
logger.fatal("fatal"); //严重错误,一般会造成系统崩溃并终止运行
logger.error("error"); // 错误信息,不影响系统运行
logger.warn("warn"); // 警告信息,可能会发生问题
logger.info("info"); // 运行信息
logger.debug("debug"); // 调试信息
logger.trace("trace"); // 追踪信息,记录程序所有的流程信息
}
log4j.rootLogger=trace,console,file
# 指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#log4j.appender.console.layout = org.apache.log4j.SimpleLayout
#log4j.appender.console.layout = org.apache.log4j.HTMLLayout
#log4j.appender.console.layout = org.apache.log4j.xml.XMLLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
#log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:
#%m 输出代码中指定的日志信息
#%p 输出优先级,及 DEBUG、INFO 等
#%n 换行符(Windows平台的换行符为 "
",Unix 平台为 "
")
#%r 输出自应用启动到输出该 log 信息耗费的毫秒数
#%c 输出打印语句所属的类的全名
#%t 输出产生该日志的线程全名
#%d 输出服务器当前时间,默认为 ISO8601,也可以指定格式,如:%d{yyyy年MM月dd日HH:mm:ss}
#%l 输出日志时间发生的位置,包括类名、线程、及在代码中的行数。如:Test.main(Test.java:10)
#%F 输出日志消息产生时所在的文件名称
#%L 输出代码中的行号 %% 输出一个 "%" 字符
#* 可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:
#%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
#%-5c 输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
#%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
#%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉
# 文件输出配置
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.file = /Users/doubledumbao/logs/log4j.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
log4j.appender.file.encoding = UTF-8
6.按照文件大小拆分的appender对象
log4j.rootLogger=trace,console,rollingFile
# 指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#log4j.appender.console.layout = org.apache.log4j.SimpleLayout
#log4j.appender.console.layout = org.apache.log4j.HTMLLayout
#log4j.appender.console.layout = org.apache.log4j.xml.XMLLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
#log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:
#%m 输出代码中指定的日志信息
#%p 输出优先级,及 DEBUG、INFO 等
#%n 换行符(Windows平台的换行符为 "
",Unix 平台为 "
")
#%r 输出自应用启动到输出该 log 信息耗费的毫秒数
#%c 输出打印语句所属的类的全名
#%t 输出产生该日志的线程全名
#%d 输出服务器当前时间,默认为 ISO8601,也可以指定格式,如:%d{yyyy年MM月dd日HH:mm:ss}
#%l 输出日志时间发生的位置,包括类名、线程、及在代码中的行数。如:Test.main(Test.java:10)
#%F 输出日志消息产生时所在的文件名称
#%L 输出代码中的行号 %% 输出一个 "%" 字符
#* 可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:
#%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
#%-5c 输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
#%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
#%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉
# 文件输出配置
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.file = /Users/doubledumbao/logs/log4j.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
log4j.appender.file.encoding = UTF-8
# 按照文件大小拆分的appender对象
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
# 指定日志文件保存路径
log4j.appender.rollingFile.file = /Users/doubledumbao/logs/log4j.log
# 指定消息格式
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.rollingFile.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
# 指定日志文件的字符集
log4j.appender.rollingFile.encoding = UTF-8
# 指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
# 指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10
7.按照时间规则拆分的appender对象
log4j.rootLogger=trace,dailyRollingFile
# 指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#log4j.appender.console.layout = org.apache.log4j.SimpleLayout
#log4j.appender.console.layout = org.apache.log4j.HTMLLayout
#log4j.appender.console.layout = org.apache.log4j.xml.XMLLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
#log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:
#%m 输出代码中指定的日志信息
#%p 输出优先级,及 DEBUG、INFO 等
#%n 换行符(Windows平台的换行符为 "
",Unix 平台为 "
")
#%r 输出自应用启动到输出该 log 信息耗费的毫秒数
#%c 输出打印语句所属的类的全名
#%t 输出产生该日志的线程全名
#%d 输出服务器当前时间,默认为 ISO8601,也可以指定格式,如:%d{yyyy年MM月dd日HH:mm:ss}
#%l 输出日志时间发生的位置,包括类名、线程、及在代码中的行数。如:Test.main(Test.java:10)
#%F 输出日志消息产生时所在的文件名称
#%L 输出代码中的行号 %% 输出一个 "%" 字符
#* 可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:
#%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
#%-5c 输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
#%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
#%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉
# 文件输出配置
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.file = /Users/doubledumbao/logs/log4j.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
log4j.appender.file.encoding = UTF-8
# 按照文件大小拆分的appender对象
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
# 指定日志文件保存路径
log4j.appender.rollingFile.file = /Users/doubledumbao/logs/log4j.log
# 指定消息格式
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.rollingFile.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
# 指定日志文件的字符集
log4j.appender.rollingFile.encoding = UTF-8
# 指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
# 指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10
# 按照时间拆分的appender对象
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
# 指定日志文件保存路径
log4j.appender.dailyRollingFile.file = /Users/doubledumbao/logs/log4j.log
# 指定消息格式
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.dailyRollingFile.layout.conversionPattern = [%-5p] %r %C %M %d{yyyy-MM-dd HH:mm:ss} %m%n
# 指定日志文件的字符集
log4j.appender.dailyRollingFile.encoding = UTF-8
# 指定日期拆分规则
log4j.appender.dailyRollingFile.datePattern = '.'yyyy-MM-dd-HH-mm-ss
8.将日志存入数据库mysql中
准备工作
show databases ;
# 创建数据库test
create database test character set utf8mb4;
# 使用数据库test
use test;
# 创建表log
CREATE TABLE `log`
(
`log_id` int(11) NOT NULL AUTO_INCREMENT,
`project_name` varchar(255) DEFAULT NULL COMMENT '目项名',
`create_date` varchar(255) DEFAULT NULL COMMENT '创建时间',
`level` varchar(255) DEFAULT NULL COMMENT '优先级',
`category` varchar(255) DEFAULT NULL COMMENT '所在类的全名',
`file_name` varchar(255) DEFAULT NULL COMMENT '输出日志消息产生时所在的文件名称 ',
`thread_name` varchar(255) DEFAULT NULL COMMENT '日志事件的线程名',
`line` varchar(255) DEFAULT NULL COMMENT '号行',
`all_category` varchar(255) DEFAULT NULL COMMENT '日志事件的发生位置',
`message` varchar(4000) DEFAULT NULL COMMENT '输出代码中指定的消息',
PRIMARY KEY (`log_id`)
);
pom.xml中添加mysql的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
log4j.rootLogger=trace,logDB
#将日志存储到mysql
log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
log4j.appender.logDB.Driver = com.mysql.jdbc.Driver
log4j.appender.logDB.URL = jdbc:mysql://192.168.0.119:3306/test
log4j.appender.logDB.User = root
log4j.appender.logDB.Password = 123456
log4j.appender.logDB.Sql = INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('itcast','%d{yyyy-MM-dd HH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
9.自定义logger对象输出
log4j.rootLogger=trace,console
# 自定义logger对象输出
log4j.logger.com.lxcourse = info,file
log4j.logger.org.apache = error,file
/**
* 测试自定义日志
*/
@Test
public void testSelfLogger() {
//开启log4j内置日志记录
LogLog.setInternalDebugging(true);
Logger logger = Logger.getLogger(Log4jDemo.class);
logger.info("hello log4j");
//日志级别
logger.fatal("fatal"); //严重错误,一般会造成系统崩溃并终止运行
logger.error("error"); // 错误信息,不影响系统运行
logger.warn("warn"); // 警告信息,可能会发生问题
logger.info("info"); // 运行信息
logger.debug("debug"); // 调试信息
logger.trace("trace"); // 追踪信息,记录程序所有的流程信息
Logger logger1 = Logger.getLogger(Logger.class);
//日志级别
logger1.fatal("fatal logger1"); //严重错误,一般会造成系统崩溃并终止运行
logger1.error("error logger1"); // 错误信息,不影响系统运行
logger1.warn("warn logger1"); // 警告信息,可能会发生问题
logger1.info("info logger1"); // 运行信息
logger1.debug("debug logger1"); // 调试信息
logger1.trace("trace logger1"); // 追踪信息,记录程序所有的流程信息
}