目录标题

  • 前言
  • 简介
  • 使用
    • Maven依赖
    • 快速测试代码
      • 使用properties文件进行配置
      • 开启内置日志
  • Log4j组件
  • 日志系统的自定义配置
    • 自定义消息输出格式
    • 自定义输出方式
      • 输出日志到文件
      • 按文件大小拆分成多个文件存储
      • 按日期拆分成多个文件存储
      • 存储到数据库

前言

当前文章只是学习笔记,具体请点击超链接:视频

简介

Log4j是个老牌的日志框架,现在已经很少使用了。用得比较多的是logback和log4j2,因此,这篇文章也是作为日志系统入门资料,不会对Log4j运行原理做深入研究,只是简单使用,目的是了解日志框架的发展史。

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

使用

Maven依赖

只需要引入Log4j依赖即可,这里使用单元测试跑代码比较方便,所以也引入Junit单元测试依赖

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

快速测试代码

日志的使用方法和JUL日志一样,先利用类路径创建一个日志对象,然后输出日志信息。

package com.demo.log4j;import org.apache.log4j.Logger;
import org.junit.Test;public class Log4jTest {@Testpublic void quickTest() {// 创建Logger对象Logger logger = Logger.getLogger(Log4jTest.class);// 输出info级别的日志信息logger.info("info message");}
}

但这次,控制台并没有输出日志信息。而是提示我们要进行配置。

这里,在代码中对日志进行基础配置。再次运行方法,可成功输出日志信息。

使用properties文件进行配置

通过跟踪源码,可以找到配置文件的名称log4j.properties。在resource目录下创建配置文件,并进行配置。


在log4j.properties文件中添加以下配置:

# 指定RootLogger顶级父元素默认配置信息
# 默认配置信息包括两部分:指定日志级别=trace,使用的appender=console
log4j.rootLogger=trace,console
# 指定控制台日志输出appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
# 指定消息格式
log4j.appender.console.layout=org.apache.log4j.SimpleLayout

删掉BasiConfigurator.configure(),重新跑。

能输出日志信息说明配置生效:

开启内置日志


或者在properties文件中配置,key的名称可以进源码找到

Log4j组件

在进一步对日志组件进行配置之前,需要对Log4j的组件有个大概的了解。Log4J主要由Loggers(日志记录器)、Appenders(输出端)和Layout(日志格式化器)组成。其中,
Loggers 控制日志的输出级别与日志是否输出;
Appenders 指定日志的输出方式(输出到控制台、文件等);
Layout 控制日志信息的输出格式。

日志系统的自定义配置

自定义消息输出格式

常用的输出格式:

格式化器类型 作用
HTMLLayout Html格式输出
SimpleLayout 简单的日志输出格式
PatternLayout 可自定义格式

修改log4j.properties文件,采用PatternLayout自定义格式

# 指定RootLogger顶级父元素默认配置信息
# 默认配置信息包括两部分:指定日志级别=trace,使用的appender=console
log4j.rootLogger=trace,console
# 指定控制台日志输出appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
# 指定消息格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout

测试代码:

@Test
public void quickTest() {// 创建Logger对象Logger logger = Logger.getLogger(Log4jTest.class);// 输出info级别的日志信息logger.info("info message");
}

输出结果:

log4j.properties追加一行配置,修改输出日志的模板

log4j.appender.console.layout.ConversionPattern=%r [%t] %p %c %x - %m%n

再次运行代码,控制台输出结构为

其中%r [%t] %p %c %x - %m%n模板的占位符含义如下:

占位符 含义
%m 输出代码中指定的日志信息
%p 输出优先级,及 DEBUG、INFO 等
%n 换行符(Windows平台的换行符为 “\n”,Unix 平台为 “\n”)
%r 输出自应用启动到输出该 log 信息耗费的毫秒数
%c 输出打印语句所属的类的全名
%t 输出产生该日志的线程全名
%d 输出服务器当前时间,默认为 ISO8601,也可以指定格式,如:%d{yyyy年MM月dd日HH:mm:ss}
%l 输出日志时间发生的位置,包括类名、线程、及在代码中的行数。如:Test.main(Test.java:10)
%F 输出日志消息产生时所在的文件名称
%L 输出代码中的行号
%% 输出一个 “%” 字符

自定义输出方式

输出日志到文件

在log4j.properties文件中追加文件方式输出的appender,日志保存路径为d:/logs/log4j.log,若文件不存在会自动创建。

# 指定控制台日志输出appender
log4j.appender.file=org.apache.log4j.FileAppender
# 指定消息格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%r [%t] %p %c %x - %m%n
# 指定消息保存路径
log4j.appender.file.file=d:/logs/log4j.log
# 文件相关设置
log4j.appender.file.encoding=UTF-8

并修改父元素的输出方式,使得同时支持控制台输出和文件输出

完整的log4j.properties文件配置:

# 指定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=%r [%t] %p %c %x - %m%n# 指定控制台日志输出appender
log4j.appender.file=org.apache.log4j.FileAppender
# 指定消息格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%r [%t] %p %c %x - %m%n
# 指定消息保存路径
log4j.appender.file.file=d:/logs/log4j.log
# 文件相关设置
log4j.appender.file.encoding=UTF-8

再次运行代码,可以看到日志已经输出到文件中

按文件大小拆分成多个文件存储

完整的log4j.properties文件配置:

# 指定RootLogger顶级父元素默认配置信息
# 默认配置信息包括两部分:指定日志级别=trace,使用的appender=console
log4j.rootLogger=trace,rollingFile# 按文件大小拆分的appender对象
# 指定控制台日志输出appender
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
# 指定消息格式
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern=%r [%t] %p %c %x - %m%n
# 指定消息保存路径
log4j.appender.rollingFile.file=d:/logs/log4j-rolling.log
# 文件相关设置
log4j.appender.rollingFile.encoding=UTF-8
log4j.appender.rollingFile.maxFileSize=100kb
# 文件最大数量
log4j.appender.rollingFile.maxBackupIndex=10

修改测试代码:

@Test
public void quickTest() {// 创建Logger对象Logger logger = Logger.getLogger(Log4jTest.class);for (int i = 0; i < 10000; i++) {// 输出info级别的日志信息logger.info("info message_" + i);}
}

运行测试代码,可以看到已经生成多个文件。

按日期拆分成多个文件存储

完整的log4j.properties文件配置:

# 指定RootLogger顶级父元素默认配置信息
# 默认配置信息包括两部分:指定日志级别=trace,使用的appender=console
log4j.rootLogger=trace,dailyFile# 按文件大小拆分的appender对象
# 指定控制台日志输出appender
log4j.appender.dailyFile=org.apache.log4j.RollingFileAppender
# 指定消息格式
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.conversionPattern=%r [%t] %p %c %x - %m%n
# 指定消息保存路径
log4j.appender.dailyFile.file=d:/logs/log4j-dailyFile.log
# 文件相关设置
log4j.appender.dailyFile.encoding=UTF-8
# 指定日期拆分规则,这里精确到秒。如果要按天拆分,value值为【'.'yyyy-MM-dd】
log4j.appender.rollingFile.datePattern='.'yyyy-MM-dd-HH-mm-ss

存储到数据库

(略)这里就不再演示,日志不会存储到类似于mysql的关系型数据库,因为受到底层数据结构的影响,mysql建议一张表最多存储500万条记录,超过了就要分库分表。日志数据属于海量数据,分分钟超500万,即使要存数据库,都是存MongoDB 等非关系型数据库。


参考资料:https://www.bilibili.com/video/BV1iJ411H74S

Java日志系统02 ---- Log4j日志相关推荐

  1. Java日志系统01 ---- JUL日志

    目录 前言 简介 使用 日志对象的父子关系 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 JUL日志是JDK自带的日志工具.无需引入任何依赖.在日常开发中并不会使用到JUL日志,仅用来作为 ...

  2. 【日志系统】Loki日志监控 - 入门初体验

    使用Grafana+Loki+Promtail入门级部署分布式日志系统(windows环境)

  3. Linux日志系统-02:logrotate简介

    目录 1.logrotate作用 2.logrotate具体功能 3.logrotate的配置文件 -------------------------------------------------- ...

  4. log4j日志 linux配置,Log4j 日志详细用法

    简单的说log4j就是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地.日志信息的输出格式 Log4j 除了可以记录程序运行日志信 ...

  5. mysql spring 整合日志_Spring整合log4j日志组件(转)

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台.文件.数据库.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等 ...

  6. python的日志模块:logging;django的日志系统;django日志输出时间修改

    Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...

  7. idea控制台输出日志过多,修改log4j日志级别去掉没用的

    打开log4j.properties文件,找到log4j.rootLogger,改为log4j.rootLogger = INFO, Console ,File 参考文章:https://blog.c ...

  8. java日志系统简介: 从tomcat大量打印debug日志说起

    博客搬家至 https://lcy362.github.io/posts/4433/ 目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4 ...

  9. Java日志系统03 ---- JCL门面日志

    目录标题 前言 简介 使用 Maven依赖 测试代码 切换Log4j日志 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 全称为Jakarta Commons Logging,是Apache ...

最新文章

  1. 动手---sbt(2)
  2. mysql编码转换工具_mysql编码转换搞定
  3. centos7设置mongodb远程连接(亲测)
  4. XML相关的安全漏洞-XXE,XPATH小结(XXE注入、XPATH注入)
  5. Flutter Duration详细概述
  6. (转)淘淘商城系列——使用Jedis操作集群
  7. java 项目心得_读懂JAVA WEB项目的一点心得 | 学步园
  8. MySQL中CASE的使用
  9. [蓝桥杯历届试题] 汉诺塔计数
  10. mac可以写linux的进程,macOS系统上读写Linux的ext4分区方法
  11. A New Start
  12. Fluent使用(一)
  13. 来给罗永浩和王自如打个分
  14. python麻将源码_a8贵州麻将源码 贵阳麻将a8源码 a8贵阳捉鸡源码
  15. Linux 必知必会
  16. 油气蒸汽发生器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. iptables防火墙之SNAT、DNAT策略及应用
  18. SIM卡状态字 SW1 SW2
  19. LDAP添加 memberOf 模块
  20. ppc64 安装jdk

热门文章

  1. Python实现json字幕转换为srt字幕
  2. Lottie简单使用
  3. 什么是ajax异步刷新
  4. JAVA8的特性——steam
  5. 计算机二级长文档排版素材,常文档排版(按照计算机二级考试试题顺序编写).doc...
  6. safari浏览器兼容css3旋转同时位移处理
  7. 扩展Detectron2的接口与逻辑
  8. 解决java多继承问题
  9. 【精选】JAVA入门算法题(四)
  10. Pads-Layout 流程