Java日志系统02 ---- Log4j日志
目录标题
- 前言
- 简介
- 使用
- 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日志相关推荐
- Java日志系统01 ---- JUL日志
目录 前言 简介 使用 日志对象的父子关系 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 JUL日志是JDK自带的日志工具.无需引入任何依赖.在日常开发中并不会使用到JUL日志,仅用来作为 ...
- 【日志系统】Loki日志监控 - 入门初体验
使用Grafana+Loki+Promtail入门级部署分布式日志系统(windows环境)
- Linux日志系统-02:logrotate简介
目录 1.logrotate作用 2.logrotate具体功能 3.logrotate的配置文件 -------------------------------------------------- ...
- log4j日志 linux配置,Log4j 日志详细用法
简单的说log4j就是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地.日志信息的输出格式 Log4j 除了可以记录程序运行日志信 ...
- mysql spring 整合日志_Spring整合log4j日志组件(转)
Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台.文件.数据库.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等 ...
- python的日志模块:logging;django的日志系统;django日志输出时间修改
Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...
- idea控制台输出日志过多,修改log4j日志级别去掉没用的
打开log4j.properties文件,找到log4j.rootLogger,改为log4j.rootLogger = INFO, Console ,File 参考文章:https://blog.c ...
- java日志系统简介: 从tomcat大量打印debug日志说起
博客搬家至 https://lcy362.github.io/posts/4433/ 目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4 ...
- Java日志系统03 ---- JCL门面日志
目录标题 前言 简介 使用 Maven依赖 测试代码 切换Log4j日志 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 全称为Jakarta Commons Logging,是Apache ...
最新文章
- 动手---sbt(2)
- mysql编码转换工具_mysql编码转换搞定
- centos7设置mongodb远程连接(亲测)
- XML相关的安全漏洞-XXE,XPATH小结(XXE注入、XPATH注入)
- Flutter Duration详细概述
- (转)淘淘商城系列——使用Jedis操作集群
- java 项目心得_读懂JAVA WEB项目的一点心得 | 学步园
- MySQL中CASE的使用
- [蓝桥杯历届试题] 汉诺塔计数
- mac可以写linux的进程,macOS系统上读写Linux的ext4分区方法
- A New Start
- Fluent使用(一)
- 来给罗永浩和王自如打个分
- python麻将源码_a8贵州麻将源码 贵阳麻将a8源码 a8贵阳捉鸡源码
- Linux 必知必会
- 油气蒸汽发生器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- iptables防火墙之SNAT、DNAT策略及应用
- SIM卡状态字 SW1 SW2
- LDAP添加 memberOf 模块
- ppc64 安装jdk