Log4J日志框架

Posted 暴躁的程序猿啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4J日志框架相关的知识,希望对你有一定的参考价值。

Log4J

本文学习了网上其他老师的视频教程此处传送

log4J是Apache下的一款开源的日志框架,通过在项目中使用log4j,我们可以控制日志输出的位置。我们可以控制每一条日志的输出格式,通过定义日志输出级别,可以更灵活的控制日志的输出过程;

创建一个log4J工程

1.导入依赖

<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>

2.demo

@Test
public void testQuick() throws Exception
    //初始化配置信息 暂时使用代码方式配置
    BasicConfigurator.configure();
    //获取日志记录对象
    Logger logger = Logger.getLogger(Log4jTest.class);
    //日志输出
    logger.info("first log4j");

控制台输出

0 [main] INFO com.xxx.test.Log4jTest  - first log4j

日志级别

常用 error warn info debug

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

Log4J组件

主要有Loggers(日志记录器)、Appenders(输出端)、和layout(日志格式化器)组成。其中Loggers控制日志的输出级别与日志是否输出;Appenders指定日志的输出方式(控制台、文件等);Layout控制日志信息的输出格式;

编写配置文件log4j.properties

log4j.rootLogger = trace,console
log4j.appender.console= org.apache.log4j.ConsoleAppender
log4j.appender.console.layout= org.apache.log4j.SimpleLayout

测试类

   @Test
    public void testQuick() throws Exception
        //获取日志记录对象
        Logger logger = Logger.getLogger(Log4jTest.class);
        //日志输出
        logger.info("first log4j");
        //日志级别

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

输出

INFO - first log4j
FATAL - fatal
ERROR - error
WARN - warn
INFO - info
DEBUG - debug
TRACE - trace

开启Log4j内置日志记录

//开启log4j 内置日志记录
LogLog.setInternalDebugging(true); 

输出

log4j: Trying to find [log4j.xml] using context classloader jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc.
log4j: Trying to find [log4j.xml] using jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc.
log4j: Using URL [file:/E:/IdeaProjects/log4J/target/classes/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL file:/E:/IdeaProjects/log4J/target/classes/log4j.properties
log4j: Parsing for [root] with value=[trace,console].
log4j: Level token is [trace].
log4j: Category root set to TRACE
log4j: Parsing appender named "console".
log4j: Parsing layout options for "console".
log4j: End of parsing for "console".
log4j: Parsed "console" options.
log4j: Finished configuring.

在配置文件中配置日志输出到指定文件中

#指定RootLogger顶级父元素默认配置信息
#指定日志级别=trace,使用的appender为console
log4j.rootLogger = trace,console,file
#指定的日志输出的appender
log4j.appender.console= org.apache.log4j.ConsoleAppender
#
log4j.appender.console.layout= org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%p]%r %c %t %dyyyy-MM-dd HH:mm:ss.SSS %m%n 

#指定的日志输出的appender
log4j.appender.file= org.apache.log4j.FileAppender
#指定消息内容格式
log4j.appender.file.layout= org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern= [%p]%r %c %t %dyyyy-MM-dd HH:mm:ss.SSS %m%n 
#指定日志文件的保存路径
log4j.appender.file.file= D:/lianxi/log4j.log
#指定日志文件字符集
log4j.appender.file.encoding= UTF-8

配置按照文件大小拆分文件 当单个文件大小达到指定值拆分成多个

#按照文件大小拆分
log4j.appender.rollingFile= org.apache.log4j.RollingFileAppender
#指定消息内容格式
log4j.appender.rollingFile.layout= org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern= [%p]%r %c %t %dyyyy-MM-dd HH:mm:ss.SSS %m%n 
#指定日志文件的保存路径
log4j.appender.rollingFile.file= D:/lianxi/log4j.log
#指定日志文件字符集
log4j.appender.rollingFile.encoding= UTF-8
#指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize= 1MB
#指定日志文件数量
log4j.appender.rollingFile.maxBackupIndex= 10

配置按照时间拆分文件 配置某个时间段的文件输出到同一个文件内

#按照时间规则拆分
log4j.appender.dailyRollingFile= org.apache.log4j.DailyRollingFileAppender
#指定消息内容格式
log4j.appender.dailyRollingFile.layout= org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.conversionPattern= [%p]%r %c %t %dyyyy-MM-dd HH:mm:ss.SSS %m%n 
#指定日志文件的保存路径
log4j.appender.dailyRollingFile.file= D:/lianxi/log4j.log
#指定日志文件字符集
log4j.appender.dailyRollingFile.encoding= UTF-8
#指定日期拆分的规则
log4j.appender.dailyRollingFile.datePattern= '.'yyyy-MM-dd-HH-mm-ss

测试按时间拆分

 @Test
    public void testQuick() throws Exception 
        //初始化配置信息 暂时使用代码方式配置
//        BasicConfigurator.configure();
        //开启log4j 内置日志记录
        LogLog.setInternalDebugging(true);
        //获取日志记录对象
        Logger logger = Logger.getLogger(Log4jTest.class);
        //日志输出
        logger.info("first log4j");
        //日志级别
        for (int i = 0; i < 10000; i++) 
            //严重错误,一般会造成系统崩溃
            logger.fatal("fatal");
            //错误,不会影响系统运行
            logger.error("error");
            //警告 可能会发生问题
            logger.warn("warn");
            //运行信息,数据连接 网络连接 等等
            logger.info("info");
            //调试信息,一般在开发中使用,记录程序变量参数传递信息的等等
            logger.debug("debug");
            //追踪信息 记录程序所有的流程信息
            logger.trace("trace");
        
    

JDBCAppender配置

log4j.rootLogger = trace,console,logDB
#指定的日志输出的appender
log4j.appender.console= org.apache.log4j.ConsoleAppender
#
log4j.appender.console.layout= org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=[%p]%r %c %t %dyyyy-MM-dd HH:mm:ss.SSS %m%n

#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://localhost:3306/log4j
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('fei','%dyyyy-MM-ddHH:mm:ss','%p','%c','%F','%t','%L','%l','%m')

导入mysql依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
   @Test
    public void testQuick() throws Exception 
        //开启log4j 内置日志记录
        LogLog.setInternalDebugging(true);
        //获取日志记录对象
        Logger logger = Logger.getLogger(Log4jTest.class);
        //日志输出
        logger.info("first log4j");
        //日志级别
            //严重错误,一般会造成系统崩溃
            logger.fatal("fatal");
            //错误,不会影响系统运行
            logger.error("error");
            //警告 可能会发生问题
            logger.warn("warn");
            //运行信息,数据连接 网络连接 等等
            logger.info("info");
            //调试信息,一般在开发中使用,记录程序变量参数传递信息的等等
            logger.debug("debug");
            //追踪信息 记录程序所有的流程信息
            logger.trace("trace");
    

以上是关于Log4J日志框架的主要内容,如果未能解决你的问题,请参考以下文章

全网可能是最全的 JAVA 日志框架适配冲突解决方案

log4j日志

log4j配置文件加载逻辑调试方法

程序源代码Log4J 日志分割

可能是全网最全的 Java 日志框架适配冲突解决方案

最全的 SpringBoot+Logback 日志配置教程