前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Log4J日志框架

Log4J日志框架

作者头像
暴躁的程序猿
发布2022-03-24 15:22:41
3100
发布2022-03-24 15:22:41
举报
文章被收录于专栏:阿飞的学习记录

Log4J

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

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

创建一个log4J工程

代码语言:javascript
复制
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

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

控制台输出

代码语言:javascript
复制
0 [main] INFO com.xxx.test.Log4jTest  - first log4j

日志级别

常用 error warn info debug

代码语言:javascript
复制
 //严重错误,一般会造成系统崩溃
    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

代码语言:javascript
复制
log4j.rootLogger = trace,console
log4j.appender.console= org.apache.log4j.ConsoleAppender
log4j.appender.console.layout= org.apache.log4j.SimpleLayout

测试类

代码语言:javascript
复制
   @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");
    }

输出

代码语言:javascript
复制
INFO - first log4j
FATAL - fatal
ERROR - error
WARN - warn
INFO - info
DEBUG - debug
TRACE - trace

开启Log4j内置日志记录

代码语言:javascript
复制
//开启log4j 内置日志记录
LogLog.setInternalDebugging(true); 

输出

代码语言:javascript
复制
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.

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

代码语言:javascript
复制
#指定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 %d{yyyy-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 %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n 
#指定日志文件的保存路径
log4j.appender.file.file= D:/lianxi/log4j.log
#指定日志文件字符集
log4j.appender.file.encoding= UTF-8

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

代码语言:javascript
复制
#按照文件大小拆分
log4j.appender.rollingFile= org.apache.log4j.RollingFileAppender
#指定消息内容格式
log4j.appender.rollingFile.layout= org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern= [%p]%r %c %t %d{yyyy-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

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

代码语言:javascript
复制
#按照时间规则拆分
log4j.appender.dailyRollingFile= org.apache.log4j.DailyRollingFileAppender
#指定消息内容格式
log4j.appender.dailyRollingFile.layout= org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.conversionPattern= [%p]%r %c %t %d{yyyy-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

测试按时间拆分

代码语言:javascript
复制
 @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配置

代码语言:javascript
复制
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 %d{yyyy-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','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

导入mysql依赖

代码语言:javascript
复制
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
代码语言:javascript
复制
   @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");
    }
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Log4J
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档