log4j + slf4j的maven配置

本文介绍如何在Java项目中使用Maven依赖配置log4j进行日志记录,包括添加依赖、配置log4j.properties文件及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加logger的日志输出,下面是配置信息供备忘

步骤:

1. 在Maven的porn.xml 文件中添加dependency如下

<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-log4j12</artifactId>  
    <version>1.7.2</version>  
</dependency>  

之后就会添加三个包,

slf4j-api-1.6.1.jar
log4j-1.2.17.jar
slf4j-log4j12-1.7.2.jar

2. 之后在项目的资源文件目录下添加log4j.properties

log4j.properties

#config root logger  
log4j.rootLogger = INFO,system.out  
log4j.appender.system.out=org.apache.log4j.ConsoleAppender  
log4j.appender.system.out.layout=org.apache.log4j.PatternLayout  
log4j.appender.system.out.layout.ConversionPattern=MINAServer Logger-->%5p{%F:%L}-%m%n  

#config this Project.file logger  
log4j.logger.thisProject.file=INFO,thisProject.file.out  
log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender  
log4j.appender.thisProject.file.out.File=logContentFile.log  
log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout  

3. 在代码中添加

private static final Logger logger = LoggerFactory.getLogger(MINAServer.class);  
logger.info("now {}" , "starting server");  

输出如下: log4j-output

如果要输出logger文件:

log4j.rootLogger=INFO,R,stdout    

log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n   

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender    
log4j.appender.R.File=../logs/log  
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
log4j.appender.R.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n   

下面是log4j.properties的配置信息,在此要感谢前辈提供的资源

log4j输出格式

  • #%m 输出代码中指定的消息
  • #%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  • #%r 输出自应用启动到输出该log信息耗费的毫秒数
  • #%c 输出所属的类目,通常就是所在类的全名
  • #%t 输出产生该日志事件的线程名
  • #%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
  • #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
  • #%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

格式化例子:

log4j.appender.thisProject.file.out.layout.ConversionPattern=log4j-->%d{yyyy MMM dd HH:mm:ss,SSS}%5p{%F\:%L}-%m%n

注意:

1. 信息格式化的小知识

这些参数中间可能会参杂一些数字比如:%5p它的意思就是在输出此参数之前加入多少个空格,还有就是里面的“\”的作用是转义字符

2. log4j.properties文件放置位置

(1)在java project项目中,它放置的位置是在项目的根目录下而不是在项目的src目录下。
(2)在javaweb项目中它放置的位置是在src目录下,因为这个时候tomcat会去默认的加载它的,不需要我们去手动的加载log4j的配置文件,只需要根据配置获取自己需要的logger实例即可,由此我们可以知道如果我们使用的不是tomcat容器的话,是不是需要自己手动加载或者至少要配置一下呢?比如使用Websphere等非apache服务器。

3. 对于java web项目里面的日志的位置配置

(1) 如果是要指定日志文件的位置为D盘下的log.txt文件。

log4j.appender.thisProject.file.out.File=d:\\log.txt

(2)如果指定日志文件的位置为当前的tomcat的工作目录下的某个文件

    log4j.appender.thisProject.file.out.File=${catalina.home}/logs/logs_tomcat.log

4. log4j的加载机制

log4j.properties加载机制?其实log4j.properties只是log4j的配置文件。程序启动时,log4j组件去读log4j.properties,和读取普通配置文件没多大区别。获取用户配置的一些log4j的属性值,调用想应该的方法为log4j属性设置。

把log4j.properties当作一个struts.xml或者一个hibernate-cfg.xml就可以了。但不同的是,log4j不像struts和hibernate,它不是一个独立的组件,没法自己完成初始化,一般都是什么组件需要它 就去初始化。比如,hibernate默认的日志组件就是log4j,在hibernate初始化的时候它会去初始化log4j。如果你没配置log4j.properties,hibernate会抛出异常,但还是可以正常初始化。


来自:http://outofmemory.cn/code-snippet/36085/java-log4j-and-slf4j-maven-and-configuration

可以参考的文章:

http://www.cnblogs.com/ITEagle/archive/2010/04/23/1718365.html

http://www.blogjava.net/zhb8015/articles/382624.html


### 如何在 Spring Boot 中集成 Log4JSlf4J 进行日志管理 #### 1. 修改 `pom.xml` 文件以移除默认的日志依赖并添加 Log4j2 依赖 为了确保使用的是 Log4j 而不是默认的 Logback,需要修改 Maven 的 `pom.xml` 文件来排除默认的日志实现,并加入对于 Log4j2 及其桥接器的支持。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除默认的日志库 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加 Log4j2 作为新的日志实现 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` #### 2. 创建或更新 Log4j2 配置文件 将名为 `log4j2.xml` 或者更推荐使用的 `log4j2-spring.xml` 放置于项目的 resources 目录下。即使不手动指定路径,Spring Boot 应用程序也能够自动识别这些位置下的配置文件[^3]。 #### 3. 启用全局异步日志记录提升性能 通过创建一个名为 `log4j2.component.properties` 的属性文件,在其中设置如下参数可以启用全局异步模式: ```properties Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector ``` 这一步骤有助于显著改善应用程序写入日志时的表现效率[^4]。 #### 4. 使用 SLF4J API 编码 尽管底层实现了 Log4j2 来处理实际的日志输出工作,但在编码过程中应当继续沿用 SLF4J API 定义接口来进行日志操作。这样做不仅保持了灵活性,而且使得未来更换其他具体日志框架变得更加容易。 ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExampleService { private static final Logger logger = LoggerFactory.getLogger(ExampleService.class); public void performAction() { logger.info("Executing action..."); try { // Some business logic here... } catch (Exception e) { logger.error("An error occurred while executing the action", e); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值