Java学习笔记——Log4j配置与Spring中使用Log4j

4 篇文章 0 订阅

Java日志记录

一、简介

       在开发过程中做好日志记录是必不可少的一部分。在线上追踪问题,分析业务逻辑快速定位错误原因,精准解决问题必离不开日志。Java中实现这一功能的狂爱很多,目前常用的有Log4j1、Log4j2、Commons Logging、Slf4j等等。

 

1、常用框架简介

  1. Log4j:Log4j是Apache的一个开源项目,通过Log4j,可以通过配置文件精细控制日志的生成过程。
  2. Log4j2: Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。

“Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback’s architecture.”

—— logging.apache.org

  1. Commons Logging:Apache基金会所属的项目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名为Commons Logging。
  2. Sl4j:Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署 时插入所需的日志记录框架。

“The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.”

—— slf4j.org

2、框架关系

       Log4j和Log4j2是包含了日志系统的实现和一套完整的接口。

       Commons Logging和Slf4j都是日志门面接口(Logging Façade),在使用过程中,只需要调用对应接口,底层的日志系统实现可以选择Log4j或Java自带的日志类(JUL).

 

二、Spring框架中使用Log4j

       在Spring框架中实现了Commons Logging,所以配合Log4j实现日志记录。

1、使用导入日志jar包

<!—版本定义在pom.xml文件开头 -->

<log4jVersion>1.2.17</log4jVersion>

<!-- log4j配置, 视情况添加 -->

    <dependency>

      <groupId>log4j</groupId>

      <artifactId>log4j</artifactId>

      <version>${log4jVersion}</version>

</dependency>

 

2、编写配置文件

Log4j 的配置文件可在官方网站查找到模板,若使用Eclipse,可以查找到由Eclipse生成的Log4j.properties文件(Eclipse安装根目录下搜索即可)。

以下是Eclipse生成的Log4j.properties文件;

# Set root category priority to INFO and its only appender to CONSOLE.

log4j.rootCategory=INFO, CONSOLE

#log4j.rootCategory=INFO, CONSOLE, LOGFILE

 

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.

log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

 

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Threshold=INFO

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n

 

# LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender

log4j.appender.LOGFILE.File=axis.log

log4j.appender.LOGFILE.Append=true

log4j.appender.LOGFILE.Threshold=INFO

log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout

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

 

       以下是参考官方样例,进行了一些修改的配置文件:

og4j.rootLogger = debug,Console,D,E

#控制日志的输出等级和分类

# log4j.rootLogger = [ level ] , appenderName, appenderName, …

 

#一下是对日志输出方式的不同控制

### 输出信息到控制抬 ###

log4j.appender.Console = org.apache.log4j.ConsoleAppender

log4j.appender.Console.Target = System.out

log4j.appender.Console.Append = true

log4j.appender.Console.Threshold = INFO

log4j.appender.Console.layout = org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern= [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

 

### 输出DEBUG 级别以上的日志到服务器/logs/debug.log ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File = ${webapp.root}/logs/debug.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

 

### 输出ERROR 级别以上的日志到服务器/logs/error.log ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File = ${webapp.root}/logs/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%nl

 

       在web.xml中添加监听器:

  <context-param>

    <param-name>log4jConfigLocation</param-name>

    <param-value>classpath:log4j-config.properties</param-value>

  </context-param>

 

  <listener>

    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

  </listener>

 

3、记录日志和查看日志

import org.apache.log4j.Logger;

 

//获取Logger实体类,this.class 代表当前 类名.class

    private static Logger logger= Logger.getLogger(this.class);

       调用方法:

 

查看控制台输出结果:

在项目目录中的target文件目录,查看debug.log和error.log文件

 

 

三、Log4j配置文件详解

       Log4j配置文件主要由三部分构成:日志信息优先等级、日志信息输入目的地、日志文件输出格式。

       日志信息优先等级从高到底分为:

ALL = TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

       官方建议一般使用DEBUG、INFO、WARN、ERROR四个等级即可。

1、配置根Logger

log4j.rootLogger = [ level ] , appenderName, appenderName, …

此处的第一项即日志优先等级,appenderName则作为输入目的地的标记。

  1. 配置appenderName,控制输出位置与格式

log4j.appender.appenderName = fully.qualified.name.of.appender.class 

log4j.appender.appenderName.option1 = value1 

log4j.appender.appenderName.option = valueN

       appender的实现类Log4j提供了一下几种:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), 

org.apache.log4j.RollingFileAppender(文件大小到达指定值产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式输出到指定的位置)

       appender的格式控制根据以下格式:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 

log4j.appender.appenderName.layout.option1 = value1 

… 

log4j.appender.appenderName.layout.option = valueN

       Log4j中支持的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

       在使用ParrernLayout的方式定制输出格式时候,类似于C语言printf函数,参数使用%()作为占位符:

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 

%r 输出自应用启动到输出该log信息耗费的毫秒数 

%c 输出所属的类目,通常就是所在类的全名 

%t 输出产生该日志事件的线程名 

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 

 

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 

 

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了对不同日志框架的集成支持,包括Log4j。在Spring Boot使用Log4j作为日志框架,可以按照以下步骤进行配置: 1. 在项目的pom.xml文件,添加Log4j的依赖项。可以使用如下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency> ``` 2. 在项目的`src/main/resources`目录下,创建一个`log4j.properties`文件,用于配置Log4j。 3. 在`log4j.properties`文件配置相应的日志输出格式、日志级别、日志文件路径等。例如: ```properties # 设置日志输出级别 log4j.rootLogger=INFO, stdout, file # 控制台输出的Appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 文件输出的Appender log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=/path/to/log/file.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=5 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n ``` 在文件配置,`log4j.rootLogger`设置了日志输出级别,`log4j.appender.stdout`指定了控制台输出的Appender,`log4j.appender.file`指定了文件输出的Appender。你可以根据自己的需求进行配置。 4. 在Spring Boot应用程序的启动类上添加`@PropertySource`注解,用于加载Log4j配置文件。例如: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.PropertySource; @SpringBootApplication @PropertySource("classpath:log4j.properties") public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 这样,当你运行Spring Boot应用程序时,Log4j将按照配置输出日志信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值