log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)

最近对系统中的旧项目实现log升级,选择了log4j2来代替log4j,作为最新一代的log实现,log4j2好在那里可以直接看log4j2性能章节

这里写写如何从log4j升级到log4j2。

1. maven依赖的变化,对log4j的依赖变成了对log4j2的依赖,在实际使用过程中发现过旧的jboss logging会有问题,使用了3.3.0.Final支持log4j2的版本。

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>${jboss-logging.version}</version>
        </dependency>
        <dependency>
  1. log4j配置的变化,配置文件从log4j.xml变成了log4j2.xml,配置文件的内容也有很大不同,log file现在可以同时支持时间和文件大小分割。而且log4j2支持log的动态变化加载,直接指定监控周期就可。下面给出一个简单配置例子。

    例子中使用了async模式,rollfile本身必须设置成immediateflush=“false”,然后创建一个async 节点,通过async节点网rollfile里面写日志。注意为了显示文件行数,方法名等信息加入了includelocation=“true”,在官方文档对这个有特别说明,对性能有影响,能不用就不用。

    另:log4j2支持更多的filter机制,有兴趣可以好好看看,对复杂日志系统的日志过滤非常有帮助。对于真实环境中,error/aduit日志需要单独存放,最好不使用async模式,防止log丢失。log4j环境要实现同时按时间和大小截断日志文件的话可以考虑结合操作系统的cronjob来实现按时间截断打包,log4j本身指关心按大小截断。

<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="60">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    </Console>
    <RollingFile name="RollingFile" fileName="logs/sample.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" immediateFlush="false" append="true">
      <PatternLayout pattern="%d{yyyy.MM.dd ‘at‘ HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
      <SizeBasedTriggeringPolicy size="50 MB" />
      <DefaultRolloverStrategy max="10" />
    </RollingFile>
    <Async name="Async" includeLocation="true">
        <AppenderRef ref="RollingFile" />
    </Async>
  </appenders>
  <loggers>
    <logger name="com.cloud.demo" additivity="false" level="trace">
        <AppenderRef ref="Async" level="trace"/>
    </logger>
    <logger name="com.cloud.demo.service.impl.NewsServiceImpl" additivity="false" level="warn">
        <AppenderRef ref="Async" level="warn"/>
    </logger>
    <logger name="org.springframework" additivity="false" level="warn">
        <AppenderRef ref="Async" level="warn"/>
    </logger>
    <root level="info">
      <AppenderRef ref="Async"/>
    </root>
  </loggers>
</configuration>   
  1. Web项目中使用log4j的变化,因为log4j2可以自动监听log配置文件改动,所以一般使用的spring log4j listener就不再需要了,在servlet3.0中不需要在web.xml加入任何log4j2的配置,如果是servlet2.5就需要加入Log4jServletContextListener和Log4jServletFilter等配置,具体可见log4j2在Web中配置

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 08:41:10

log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)的相关文章

log4j.xml 为什么要使用SLF4J而不是Log4J

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="stdout" cl

JavaWeb-21 JDBC(泛型,注解,Servlet3.0,Log4j)

JavaWeb-21 泛型,注解,Servlet3.0,Log4j 今天任务: 1.泛型概述 2.Dao模式下泛型的引入 3.注解及反射注解 4.Servlet3.0 5.Log4j(明白怎么用,就够) 一.了解泛型 1.了解泛型: GenericTestDemo1.java package com.itheima.generic; /** * 泛型类中的所有实例方法都可以不用声明,不包含静态方法 * @author wangli * * @param <T> */ public class

在tomcat上全手工部署Servlet3.0

从头写java文件的方式,编译成CLASS文件,加强对SERVLET容器的理解. 稍后试试JAR和WAR包. 文件内容(跟以前用IDE的一样): HelloServlet.java: package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet

使用Servlet3.0提供的API实现文件上传

在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 1 <%@ page language="java" pageEncoding="UTF-8"

利用servlet3.0上传,纯原生上传,不依赖任何第三方包

tomcat7里面自带的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上传,异步等等.... 如果你的tomcat版本低于7的话,单独在项目中引入servlet3.0.jar的话,有可能会出错,具体没研究过,可能是不兼容吧.所以要使用servlet3.0新特性的话,尽量使用tomcat7 不多说了,贴上代码 @WebServlet(name = "uploadServlet", urlPatterns = "/uploadServ

项目支持Servlet3.0的新特性

一.Servlet3.0介绍 Servlet3.0是Java EE6规范的一部分,Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程. 二.开发Servlet3.0程序的所需要的环境 开发Servlet3.0的程序需要一定的环境支持.MyEclipse10和Tomcat7都提供了对Java EE6规范的支持.Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK1.6以上的版本. 所以开

如何将低版本的myeclipse改造成可以使用servlet3.0的神器

开发servlet3.0使用的环境一般为: IDE:MyEclipse 10+ JDK:JDK 1.6+ tomcat:tomcat 7+ 如果使用的版本不够可以采用以下方法解决 1.创建WebProject (1)使用MyEclipse 新建一个Web Project,选择最高版本的Java EE5.0 (2)打开Tomcat7的解压目录下的lib文件夹中,找到我们需要的[annotations-api.jar.el-api.jar.jasper.jar.jasper-el.jar.jsp-a

servlet3.0 JQuary Ajax基本使用

servlet3.0 没有web.xml文件,需要使用注解进行配置. js: $(document).ready(function(){ $("#btn").click(function(){ $.ajax({ type:'post', url:'/testAjax/testAjax1', data:{'name':'postmethod'}, success: function (data) { alert(data); }, }); }) }); java代码如下: // @Web

Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)

Servlet3.0提供@WebFilter注解将一个实现了javax.servlet.Filter接口的类定义为过滤器,这样我们在web应用中创建过滤器时,也不再需要在web.xml文件中配置过滤器的相关描述信息了. 下面我们来创建一个过滤器,体验一下使用@WebFilter注解标注过滤器,如下所示: 过滤器的代码如下: 1 package me.gacl.web.filter; 2 import java.io.IOException; 3 import javax.servlet.Filt