Java日志系统之Log4j

目录

Log4J

Log4j的简单使用

日志级别

Log4j的组件

Loggers

Appenders

Layout

Layout格式

设置配置文件加载

配置文件解析


Log4J

是Apache下开源的日志框架

Log4j的简单使用

java 复制代码
    @Test
    public void testLog4J(){
        Logger logger = Logger.getLogger(Log4jTest.class);
        logger.info("hello log4j");
    }

log4j:WARN No appenders could be found for logger (com.zmt.Log4jTest).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See Apache log4j 1.2 - Frequently Asked Technical Questions for more info.

它并没有我们想象的一样,直接输出日志,而是输出警告信息。意思为需要一个初始化配置信息。

添加一个BasicConfigurator.configure()即可。

日志级别

  • fatal:严重错误,一般会造成系统崩溃并停止运行
  • error:错误信息,不会影响系统运行
  • warn:警告信息,可能会发生问题
  • info:运行信息,数据库连接,网络连接,IO等信息
  • debug:信息调试,一般在开发中使用(默认级别)
  • trace:追踪信息,记录程序所有的流程信息

Log4j的组件

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

Loggers

与JUL(Java日志系统之JUL-CSDN博客)的Logger一样具有父子关系,有一个默认的根Logger对象,父子关系也通过全路径来判断。由如果没有设置配置,则采用根Logger的默认配置。

Appenders

指定日志输出位置

  • ConsoleAppender:将日志输出到控制台
  • FileAppender:将日志输出到文件中
  • DailyRollingFileAppender:将日志输出到一个日志文件,并且每天输出到一个新的文件
  • RollingFileAppenger:将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指尺寸时,会自动把文件改名,同时产生一个新的文件
  • DBCAppender:把日志信息保存到数据库中

Layout

  • HTMLLayout:格式化日志输出为HTML表格形式
  • SimpleLayout:简单的日志输出格式化,打印的日志格式为 (info-message)
  • PatternLayout:最强大的格式化期,可以根据自定义格式输出日志,如果没有指定转换格式,就是用默认的转换格式

Layout格式

只有在Appender为PatternLayout时有效

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

测试如下格式的日志输出

log4j.appender.console.layout.conversionPattern = Thread:%t [%5p] %d{yyyy-MM-dd HH:mm:ss}: %m%n

设置配置文件加载

log4j支持一下几种配置文件格式

LomManager加载配置文件的路径是通过类加载器加载。

加载方法为下图

进行文件配置

配置文件解析

bash 复制代码
log4j.rootLogger=debug,console,file

log4j.appender.console =org.apache.log4j.ConsoleAppender
#指定消息格式类型
log4j.appender.console.layout =org.apache.log4j.PatternLayout
#指定转化格式内容
log4j.appender.console.layout.conversionPattern = Thread:%t  [%5p]  %d{yyyy-MM-dd HH:mm:ss}: %m%n

log4j.appender.file =org.apache.log4j.FileAppender
log4j.appender.file.layout =org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern = Thread:%t  [%5p]  %d{yyyy-MM-dd HH:mm:ss}: %m%n
#指定文件路径
log4j.appender.file.file=/logs/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 = Thread:%t  [%5p]  %d{yyyy-MM-dd HH:mm:ss}: %m%n
#指定文件路径
log4j.appender.rollingFile.file=/logs/log4j.log
#指定文件编码格式
log4j.appender.rollingFile.encoding=UTF-8
#文件到达1MB便进行拆分
log4j.appender.rollingFile.maxFileSize=1MB
#指定拆分数量,如果拆分不够的话,会按照时间久远进行覆盖
log4j.appender.rollingFile.maxBackupIndex= 10


log4j.appender.dailyFile =org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.layout =org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.conversionPattern = Thread:%t  [%5p]  %d{yyyy-MM-dd HH:mm:ss}: %m%n
#指定文件路径
log4j.appender.dailyFile.file=/logs/log4j.log
#指定文件编码格式
log4j.appender.dailyFile.encoding=UTF-8
#指定时间拆分规则 默认以天为单位
log4j.appender.dailyFile.datePattern='.'yyyy-MM-dd
相关推荐
Themberfue11 分钟前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
深山夕照深秋雨mo20 分钟前
在Java中操作Redis
java·开发语言·redis
wangbing112524 分钟前
开发指南067-单元测试
单元测试
努力的布布25 分钟前
SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
java·后端·spring
xujinwei_gingko26 分钟前
Spring MVC 常用注解
java·spring·mvc
PacosonSWJTU30 分钟前
spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
java·后端·springmvc
PacosonSWJTU32 分钟前
spring揭秘26-springmvc06-springmvc注解驱动的web应用
java·spring·springmvc
原野心存1 小时前
java基础进阶——继承、多态、异常捕获(2)
java·java基础知识·java代码审计
进阶的架构师1 小时前
互联网Java工程师面试题及答案整理(2024年最新版)
java·开发语言
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现各种限流算法——固定时间窗、滑动时间窗、令牌桶算法、漏桶算法
java·后端·算法·spring cloud·微服务·架构