Log4j日志初探

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"); // 追踪信息,记录程序所有的流程信息
    }

PatternLayout

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"); // 追踪信息,记录程序所有的流程信息
}
原文地址:https://www.cnblogs.com/zhaoran8775/p/12984979.html