zoukankan      html  css  js  c++  java
  • 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"); // 追踪信息,记录程序所有的流程信息
    }
    
  • 相关阅读:
    如何提高使用Java反射的效率?
    程序猿必知必会Linux命令之awk
    Java日志正确使用姿势
    “==”、“equals()”、“hashcode()”之间的秘密
    Mybatis缓存
    Java高并发至Synchronized
    web.py
    python爬虫模块理解
    通用http状态码
    SpringMVC的理论
  • 原文地址:https://www.cnblogs.com/zhaoran8775/p/12984979.html
Copyright © 2011-2022 走看看