为Java项目添加slf4j的log日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们今天要给之前编码的一个maven的web项目提供slf4j的日志,这样所有的日志信息可以显示到项目的某个目录的log文件中。项目的样子如下图:首先配置pom,我也不知道下面的内容是否必要 org.

我们今天要给之前编码的一个maven的web项目提供slf4j的日志,这样所有的日志信息可以显示到项目的某个目录的log文件中。
项目的样子如下图:
_
首先配置pom,我也不知道下面的内容是否必要

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.10.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.8.0-beta0</version>
</dependency>

spring5以后取消了对于Log4jConfigListener的支持,或者说spring的web那个包中Log4jConfigListener的类已经作废了,所以需要使用spring4版本的类库。
我们的项目就可以配置slf4j了。
slf4j要求我们首先提供一个名为log4j.properties的配置文件其内容如下:

# 日志输出级别(INFO)和输出位置(stdout,R)
log4j.rootLogger=INFO, stdout , R

# 日志输出位置为控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

# 日志输出位置为文件
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\OxygenWork\\WindDevelop\\logs\\WindLog.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

# 定义相应包路径下的日志输出级别
log4j.logger.com.alibaba=DEBUG
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.apache.velocity=FATAL
 
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.logicalcobwebs=WARN

上述配置内容中log4j.appender.R.File的值表示最终日志内容保存到那个log文件中。
上述这个log4j.properties配置文件需要被配置到这个项目的classpath下
_
上述位置实际上是java源文件的位置,但是当你将文件拷贝到这个位置以后,eclipse会帮助你将文件部署到class的根目录,如下图:
_
好的,我们现在拥有了配置文件,我们需要将slf4j的配置文件,配置到web.xml中,让它起作用。

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--配置slf4j-->
  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
  </context-param>
   <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
  <!--下面两个filter和servlet与本主题无关-->
  <filter>
      <filter-name>WindFilter</filter-name>
      <display-name>WindFilter</display-name>
      <description></description>
      <filter-class>net.web.WindFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>WindFilter</filter-name>
      <url-pattern>/yes/enterpage.jsp</url-pattern>
  </filter-mapping>
  
  <servlet>
      <servlet-name>WindServlet</servlet-name>
      <display-name>WindServlet</display-name>
      <description></description>
      <servlet-class>net.web.WindServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>WindServlet</servlet-name>
      <url-pattern>/yes/enterpage.jsp</url-pattern>
  </servlet-mapping>
  
</web-app>

全都配置好了,我们来测试一下

package net.infopack;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTest {
    
    final static Logger logger = LoggerFactory.getLogger(LogTest.class);
    
    public void fLogCheck(String str) {
        
        String s1 = str + "shut the fk up!";
        logger.info("测试:{}", s1);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        LogTest lt1 = new LogTest();
        lt1.fLogCheck("Paul George,");
    }

}

_
运行的结果,console和log文件
_
_
上述

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
26天前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
29 5
图解MySQL【日志】——Redo Log
|
1月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
121 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
5天前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
58 13
|
9天前
|
缓存 Java 编译器
|
9天前
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
7天前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
|
1月前
|
XML JSON Java
Java中Log级别和解析
日志级别定义了日志信息的重要程度,从低到高依次为:TRACE(详细调试)、DEBUG(开发调试)、INFO(一般信息)、WARN(潜在问题)、ERROR(错误信息)和FATAL(严重错误)。开发人员可根据需要设置不同的日志级别,以控制日志输出量,避免影响性能或干扰问题排查。日志框架如Log4j 2由Logger、Appender和Layout组成,通过配置文件指定日志级别、输出目标和格式。
|
2月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
129 7
MySQL事务日志-Undo Log工作原理分析
|
1月前
|
存储 关系型数据库 MySQL
图解MySQL【日志】——Undo Log
Undo Log(回滚日志)是 MySQL 中用于实现事务原子性和一致性的关键机制。在默认的自动提交模式下,MySQL 隐式开启事务,每条增删改语句都会记录到 Undo Log 中。其主要作用包括:
38 0
|
3月前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
1065 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决

热门文章

最新文章