目录

1 Log4j 介绍 

2 Log4j组件

3 代码示例

3.1 简单入门

 3.2 输出日志到文件

3.2.1 按照日志大小将文件进行分割:

 3.2.2 按照日期将文件进行分割:

 3.3 将日志信息输出到数据库


1 Log4j 介绍 

        Log4j是Apache是apache旗下的一款开源的日志框架,通过在项目中使用Log4j,我们可以控制信息输出到控制台,文件、甚至是数据库中。我们可以控制每一条日志的输出格式。通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目调试。

2 Log4j组件

        log4j主要由Loggers(日志记录器),Appenders(输出器),和Layout(日志格式化器)。其中Loggers控制日志输出级别和日志是否输出;Appenders指定日志的输出方式(输出到控制台,文件等);Layout控制日志输出的格式。

Loggers:

        日志记录器,负责收集处理日志记录,实例的命名是类"XX"的全限定类名,Loggers的名字大小写铭感,其命名有继承机制:例如:name为org.apache.commons的logger会继承为name为org.apache的logger。

        Log4j中有一个特殊的logger叫做"root",它是所有logger的根。也就意味着其他所有的logger都会直接会间接的继承root。root的logger可以用Logger.getRootLogger()方法获取。但是,自log4j1.2版以来,Logger类已经取代了Category类,对于熟悉早期版本的log4j的来说,Logger类可以被视为Category的别名。

Appensers:

        Appensers用来指定日志输出到哪个地方,可以同时指定日志输出目的地,Log4j常用的输出目的地有一下几种:

ConsoleAppender: 将日志输出到控制台

FileAppender: 将日志输出到文件

DailyRollingFileAppender:将日志输出到一个文件,并且每天输出到一个新的文件。

RollingFileAppender:将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定的尺寸时,会自动把文件改名,同时产生一个新的文件。

JDBCAppender:将日志信息保存到数据库。

Layouts:

        布局器Layouts用于控制日志输出内容的格式,让我们可以使用各种需要的格式输出日志。Log4j常用的Layouts:

HTMLLayout: 格式化日志输出HTML表格形式

SimpleLayout: 简单的日志输出格式化,打印的日志格式为(info - message)

PatternLayout:最强大的格式化期,可以根据自定义格式输出日志,如果没有指定转换格式,就是用默认的转换格式。

格式:

3 代码示例

注意: 日志打印输出,需要初始化配置文件。

如果没有配置文件,则会弹出警告:

但只是想想刚开测试并且不想使用配置文件可以用:

//初始化配置信息
BasicConfigurator.configure();

3.1 简单入门

log4j.properties:

log4j.rootLogger = trace,console
#指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#指定消息格式 layout
log4j.appender.console.layout = org.apache.log4j.SimpleLayout

 测试类:

    @Test
    public void test1(){

        //不想用配置文件可用此行代码
//        BasicConfigurator.configure();
        //初始化配置信息
        Logger logger = Logger.getLogger(Log4jTest.class);
        logger.info("hello world");

        //严重错误 一般造成系统崩溃并终止运行
        logger.fatal("fatal");
        //错误信息 不会影响系统运行
        logger.error("error");
        //警告信息 可能会发生问题
        logger.warn("warn");
        //运行信息 数据连接 网络连接 IO操作
        logger.info("info");
        //调试信息,一般在开发中使用,记录程序变量参数传递信息
        logger.debug("debug");
        //追踪信息 记录程序所有的流程信息
        logger.trace("trace");
    }
}

运行结果:

 3.2 输出日志到文件

log4j.rootLogger = trace,rollingFile
#指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#指定消息格式 layout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.console.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n


#指定控制台日志输出的appender
log4j.appender.file = org.apache.log4j.FileAppender
#指定消息格式 layout
log4j.appender.file.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.file.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.file.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.file.encoding = UTF-8

#指定控制台日志输出的appender
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
#指定消息格式 layout
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.rollingFile.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.rollingFile.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.rollingFile.encoding = UTF-8
#指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
#指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10


3.2.1 按照日志大小将文件进行分割:

测试代码:

    @Test
    public void test1(){

        LogLog.setInternalDebugging(true);

        //不想用配置文件可用此行代码
//        BasicConfigurator.configure();
        //初始化配置信息
        Logger logger = Logger.getLogger(Log4jTest.class);
        logger.info("hello world");

        for (int i = 0; i < 10000; i++) {
            //严重错误 一般造成系统崩溃并终止运行
            logger.fatal("fatal");
            //错误信息 不会影响系统运行
            logger.error("error");
            //警告信息 可能会发生问题
            logger.warn("warn");
            //运行信息 数据连接 网络连接 IO操作
            logger.info("info");
            //调试信息,一般在开发中使用,记录程序变量参数传递信息
            logger.debug("debug");
            //追踪信息 记录程序所有的流程信息
            logger.trace("trace");
        }
    }
}

运行结果:

 3.2.2 按照日期将文件进行分割:

配置文件相关信息(log4j.properties):

log4j.rootLogger = trace,dailyFile


#指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#指定消息格式 layout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.console.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n


#日志文件输出的appender对象
log4j.appender.file = org.apache.log4j.FileAppender
#指定消息格式 layout
log4j.appender.file.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.file.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.file.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.file.encoding = UTF-8

#按照文件大小拆分的appender对象
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
#指定消息格式 layout
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.rollingFile.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.rollingFile.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.rollingFile.encoding = UTF-8
#指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
#指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10

#按照时间拆分的appender对象
log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender
#指定消息格式 layout
log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.dailyFile.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.dailyFile.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.dailyFile.encoding = UTF-8
#指定日志文件内容的大小
log4j.appender.dailyFile.datePattern = '-'YYYY-MM-dd-HH-mm-ss

测试类代码与上相同:测试结果(控制台信息不再展示):

 3.3 将日志信息输出到数据库

首先记得配置mysql驱动

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

配置文件:

log4j.rootLogger = trace,logDB


#指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#指定消息格式 layout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.console.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n


#日志文件输出的appender对象
log4j.appender.file = org.apache.log4j.FileAppender
#指定消息格式 layout
log4j.appender.file.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.file.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.file.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.file.encoding = UTF-8

#按照文件大小拆分的appender对象
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
#指定消息格式 layout
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
log4j.appender.rollingFile.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss} %m%n
#指定日志文件保存路径
log4j.appender.rollingFile.file = C://Users//LiuBuJun//Desktop//log//log4j.log
#指定日志文件的字符集
log4j.appender.rollingFile.encoding = UTF-8
#指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
#指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10

#按照时间拆分的appender对象
log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
log4j.appender.logDB.Driver = com.mysql.cj.jdbc.Driver
log4j.appender.logDB.URL =jdbc:mysql://localhost:3306/test?serverTimezone=GMT
log4j.appender.logDB.User = root
log4j.appender.logDB.Password = lj123456
log4j.appender.logDB.Sql = INSERT INTO log(project_name, create_date, level, categery, file_name, thread_name, line, all_categery, message) values ('itcast', '%d{yyyy-MM-dd HH:mm:ss}', '%p', '%c', '%F', '%t', '%L', '%l', '%m')

执行测试类(与上相同)

数据库日志已经插入成功。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐