首页 > 编程语言 >Java中Log4j的配置与使用详细解析

Java中Log4j的配置与使用详细解析

时间:2024-10-15 21:50:44浏览次数:10  
标签:输出 Java appender log4j apache org 日志 解析 Log4j

Log4j

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件。

  • 也可以控制每一条日志的输出格式

  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

  • 这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

日志级别

debug调试 info信息 warn警告 error错误 fatal严重(从小到大)

debug(调试):非常详细的代码运行记录

info(信息):常规的信息输出【比较常用】,一般用于记录应用程序的运行状态和关键信息,如启动、关闭等

warn(警告):程序中出现了一些不合理的情况,但是还没有达到影响运行的程度,不会导致程序立即停止。

error(错误):程序中某个模块发生了错误,但是不影响整体的系统运行,只要妥善处理。例如捕获异常。

fatal(严重):严重的错误不是来自于业务逻辑,可能来自于运行环境,可能会导致系统崩溃,一般用于记录程序运行过程中无法恢复的严重错误。例如:内存溢出

Log4j三大核心组件

1、Logger(日志记录器)

Logger是Log4j中负责记录日志的核心组件。他提供了各种日志记录方法,如debug()、info()、warn()、error()、fatal()等。

logger.debug("这是一个调试信息");
logger.info("这是一个信息");
logger.warn("这是一个警告");
logger.error("这是一个错误");
logger.fatal("这是一个致命错误");

2、Appender(日志输出器)

Appender负责将日志输出到指定的目的地。Log4j提供了多种Appender类型,如ConsoleAppender(控制台)、FileAppender(文件)、DailyRollingFileAppender(按日期滚动文件)等。

org.apache.log4j.ConsoleAppender //控制台
org.apache.log4j.FileAppender //⽂件
org.apache.log4j.DailyRollingFileAppender //每天产⽣⼀个⽇志⽂件
org.apache.log4j.RollingFileAppender //⽂件⼤⼩达到指定尺⼨时产⽣⼀个新⽂件
org.apache.log4j.WriterAppender //将⽇志以流格式发送到任意指定位置
org.apache.log4j.JDBCAppender //把⽇志⽤JDBC记录到数据库

3、Layout(日志格式化器)

Layout负责将日志信息格式化成特定的格式。常见格式有:

org.apache.log4j.HTMLLayout //HTML表格形式布局
org.apache.log4j.PatternLayout //根据模板布局
org.apache.log4j.SimpleLayout //包含⽇志信息级别和信息字符串
org.apache.log4j.TTCCLayout //包含⽇志产⽣的线程,类别,内容等信息
log4j.properties配置文件
# 设置输出器 [level,] appenderName1, appenderName2,....
# level为日志输出级别,默认为debug
log4j.rootLogger = debug,logger1,logger2

# 输出源配置,通常包含以下两种结构:
# 声明输出源类型
# log4j.appender.输出源名称 = 输出源类型
# 为该输出源定义配置参数
# log4j.appender.输出源名称.配置参数名 = 配置参数值

## 第一个输出源
# 使用控制台输出源类型(输出时会将信息打印到控制台上)
log4j.appender.logger1 = org.apache.log4j.ConsoleAppender
# 输出使用的目标对象
log4j.appender.logger1.Target = System.out
# 定义该输出源使用的布局  PatternLayout:格式字符串
log4j.appender.logger1.layout = org.apache.log4j.PatternLayout
# 定义布局格式  -:向左对齐
log4j.appender.logger1.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] [%t] [%m]%n

## 第二个输出源
# 使用每天产生一个新日志文件的输出源
log4j.appender.logger2 = org.apache.log4j.DailyRollingFileAppender
# 输出文件的路径
log4j.appender.logger2.File = logs/env-log
log4j.appender.logger2.datePattern='.'yyyy-MM-dd HH-mm'.log'
# 是否追加
log4j.appender.logger2.Append = true
# 输出级别
log4j.appender.logger2.Threshold = info
# 定义该输出源使用的布局
log4j.appender.logger2.layout = org.apache.log4j.PatternLayout
# 定义布局格式
log4j.appender.logger2.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] [%m]%n
基本使用

1、引入相关依赖:Log4j

<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
</dependency>

2、导入包:import org.apache.log4j.Logger;

3、创建日志对象,参数为当前类的class

  • static Logger log = Logger.getLogger(Log4jExample.class);

import org.apache.log4j.Logger;

public class Log4jExample {
    static final Logger logger = Logger.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        // 输出不同级别的日志
        logger.fatal("这是一个致命错误");
        logger.error("这是一个错误");
        logger.warn("这是一个警告");
        logger.info("这是一个信息");
        logger.debug("这是一个调试信息");
        logger.trace("这是一个跟踪信息");
    }
}

最后:在Mybatis设置中设定STDOUT_LOGGING是标准的日志输出,也可以通过上述导包和依赖的方式,设置为Log4j

<!-- 开启SQL日志输出功能  STDOUT_LOGGING标准的日志输出-->
<setting name="logImpl"	value="STDOUT_LOGGING"/>

<setting name="logImpl"	value="log4j"/>

标签:输出,Java,appender,log4j,apache,org,日志,解析,Log4j
From: https://blog.csdn.net/2301_77032029/article/details/142965352

相关文章

  • Java第二节
    复习if语句if(表达式) {语句}if后面的表达式只能是布尔表达式(关系表达式、逻辑表达式、布尔类型变量)if后面的语句只能是一条语句,多于一条则必须用括号括起来,变成一条复合语句。新知1.char字符类型,占用2个字节 2.字符常量:单引号括起来的单个字符 类型的转换:不同类......
  • Java面向对象六大设计原则总结1
    简介         在Java面向对象设计中,遵循六大原则是确保代码质量、可维护性和可扩展性的关键。这六大原则分别是:单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)和迪米特法则(LOD)。以下是对这六大原则的详细解释,并结合实例进行说明......
  • 【Java SE 题库】递归的魅力之--> 青蛙跳台阶问题(秒了)
     ......
  • Java毕业生就业推荐系统
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器后台路径地址:localhost:8080/项目名称/admin/dist/index.html前台路径地址:localhost:80......
  • 不用越狱的苹果手机群控管理方案 解析
    苹果手机由于其封闭性,一直以来在批量管理和同步操作方面存在较大的局限性。然而,随着技术的进步,免越狱的苹果手机群控管理方案逐渐成为了高手们的新宠。这些方案不仅能够实现批量管理和同步操作,还能够通过投屏技术将手机屏幕投影到大屏幕上,使得群控管理更加高效便捷。二、免......
  • Java基础面试题
    一、Java八大基本数据类型byteshortcharintlongdoublefloatboolean项目中一般用在各种变量如传参入参、分页等,一般用包装类二、面向对象的三大特性封装:把类的属性私有化并封装到公共方法内,使用方法才能对属性进行获取和修改,隐藏代码实现细节,提高程序安全性继承:子......
  • java程池状态
    在Java中,线程池的状态是由java.util.concurrent.ThreadPoolExecutor类管理的。ThreadPoolExecutor是ExecutorService的一个实现,提供了对线程池的详细控制。线程池的状态可以通过getPoolSize、getActiveCount、getTaskCount、getCompletedTaskCount等方法来获取。线程池的......
  • 【JavaWeb】一文读懂Cookie、Session&Token 的区别和联系
    大佬精心打造:JavaWeb进阶学习资料》》点击免费获取【javaWeb】Cookie&Session&SpringSession原理分析简介Cookie、Session、Token这三者是不同发展阶段的产物,都是为了解决无状态的HTTP协议,提升网站的交互体验。但是他们各有优缺点,三者也没有明显的对立关系,反而常常......
  • 【JavaWeb】Spring Boot中@Import多种使用方式
    @Import是一个非常有用的注解,它的长处在于你可以通过配置来控制是否注入该Bean,也可以通过条件来控制注入哪些Bean到Spring容器中。比如我们熟悉的:@EnableAsync 、@EnableCaching、@EnableScheduling等等统一采用的都是借助@Import注解来实现的。  需要注意的是:ImportSele......
  • 学习java第八天
    一.方法重写/方法覆盖/Override为什么要进行方法重写/覆盖?子类不满足父类的逻辑,进行重写方法重写的注意事项:1.方法重写前提是必须要继承2.所继承的方法名必须一致,方法参数也要一致举例说明一个方法的三部分publicvoideat(){}第一部分头部 访问权限修饰符publicp......