为了让web application能随意使用logging组件而不受web容器自身的影响,从tomcat 6.0开始,tomact默认使用的是java.util.logging framework来记录其运行日志,但同时也提供了可选择其他log框架的接口扩展包,官网上给出了如何将tomcat的运行日志框架切换到log4j,但是目前大部分web应用都使用的是性能更好的log4j2,其配置过程相比于log4j,稍有不同,今天就给大家介绍一些如何将tomcat的运行日志框架切换到log4j2下。

   基础组件准备:
    开始前需要准备tomcat,由于我们线上使用的是tomcat 7.0.59,因此本文基于此版本进行升级,log4j2使用现在最新的2.5,主要是因为我们需要将tomcat的运行日志打进kafka进行分析,而log4j2只用2.4及以后的版本才支持kafka的append。
详细步骤:
  1. 下载tomcat运行日志框架扩展的接口包tomcat-juli.jar和 tomcat-juli-adapters.jar,其中tomcat-juli.jar包含了Apache Commons Logging 实现类,用于发现log4j2包的位置,adapter应该是个适配接口。下载地址为:http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.59/bin/extras/tomcat-juli.jar ,http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.59/bin/extras/tomcat-juli-adapters.jar
  2. 下载log4j2日志2.5版本,包括3个jar,log4j-core-2.5,log4j-api-2.5,log4j-1.2-api-2.5,其中log4j-1.2-api-2.5用于log4j2与log4j1的桥接,下载地址为:http://mirror.bit.edu.cn/apache/logging/log4j/2.5/apache-log4j-2.5-bin.zip
  3. 将下载下来的3个log4j2的jar包和 tomcat-juli-adapters.jar放到tomact目录下的lib文件夹下;
  4. 将下载下来的tomcat-juli.jar替换tomcat目录下bin文件夹下的同名文件;
  5. 删除或重命名tomact目录下conf文件夹下的logging.properties文件;
  6. 新增log4j2.xml,放到tomcat目录下lib文件夹下(参看附件);
  7. 启动tomcat,在tomcat目录下logs文件夹下查看日志文件
 
如果你的web工程不是放在tomcat/webapp下,需要在web工程所在目录下做类似操作,具体看参考文档,这里我就截个图简单提示一下:
 
至此tomcat运行日志框架升级完成,由于log4j2支持mq,kafka,db等多种append,因此我们可以更好的处理tomcat的运行日志。
 
参考:
    

附:log4j2.xml配置内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="off">
<Properties>
<Property name="CATALINA_BASE_LOGPATH">../logs</Property>
<Property name="logLocalIP">10.11.12.13</Property>
</Properties>
<appenders>
<console name="CONSOLE" target="SYSTEM_OUT">
<patternLayout charset="UTF-8"
pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
</console> <rollingFile name="CATALINA"
fileName="${CATALINA_BASE_LOGPATH}/catalina.log"
filePattern="${CATALINA_BASE_LOGPATH}/catalina.%date{yyyyMMdd}">
<patternLayout charset="UTF-8"
pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
<policies>
<timeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB"/>
</policies>
</rollingFile> <rollingFile name="LOCALHOST"
fileName="${CATALINA_BASE_LOGPATH}/localhost.log"
filePattern="${CATALINA_BASE_LOGPATH}/localhost.%date{yyyyMMdd}">
<patternLayout charset="UTF-8"
pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
<policies>
<timeBasedTriggeringPolicy />
</policies>
</rollingFile> <rollingFile name="MANAGER"
fileName="${CATALINA_BASE_LOGPATH}/manager.log"
filePattern="${CATALINA_BASE_LOGPATH}/manager.%date{yyyyMMdd}">
<patternLayout charset="UTF-8"
pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
<policies>
<timeBasedTriggeringPolicy />
</policies>
</rollingFile> <rollingFile name="HOST-MANAGER"
fileName="${CATALINA_BASE_LOGPATH}/host-manager.log"
filePattern="${CATALINA_BASE_LOGPATH}/host-manager.%date{yyyyMMdd}">
<patternLayout charset="UTF-8"
pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
<policies>
<timeBasedTriggeringPolicy />
</policies>
</rollingFile> <Kafka name="KAFKA_ERROR" topic="leinfo">
<filters>
<thresholdFilter level="ERROR" onMatch="ACCEPT"
onMismatch="DENY" />
</filters>
<patternLayout charset="UTF-8"
pattern="%date{yyyy-MM-dd HH:mm:ss}||%-5level||%logger||Tomcat||${logLocalIP}||%mdc{logRemoteIP}||%ex{short.className}.%ex{short.methodName}[%ex{short.lineNumber}]||%message||%ex{1}%n" >
</patternLayout> <Property name="bootstrap.servers">10.11.12.13:9092,20.150.70.106:9092(示例)</Property>
</Kafka> </appenders> <loggers>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" level="INFO"> <appender-ref ref="LOCALHOST" /> </logger> <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]" level="INFO" additivity="false"> <appender-ref ref="MANAGER" /> </logger> <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]" level="INFO" additivity="false"> <appender-ref ref="HOST-MANAGER" /> </logger> <Logger name="org.apache.kafka" level="INFO" /><!-- avoid recursive logging --> <root level="INFO">
<appender-ref ref="CATALINA" />
<appender-ref ref="KAFKA_ERROR" />
<appender-ref ref="CONSOLE" />
</root>
</loggers>
</configuration>
 

升级tomcat7的运行日志框架到log4j2,可以打进kafka的更多相关文章

  1. DZ升级到X3.2后,UCenter用户管理中心进不了了

    前天将DZ升级到X3.2后,UCenter用户管理中心进不了了,输入的密码也对,验证码也对,就是点登录后没反应,又回来输入前的状态.如果更换密码后,显示密码错误,证明密码是没错的.但就是进不了.大家看 ...

  2. log4j2发送消息至Kafka

    title: 自定义log4j2发送日志到Kafka tags: log4j2,kafka 为了给公司的大数据平台提供各项目组的日志,而又使各项目组在改动上无感知.做了一番调研后才发现log4j2默认 ...

  3. 将dubbo框架里的服务提供者迁移进k8s里,以docker提供服务时要注意的细节

    在将dubbo框架里的服务提供者迁移进k8s时,有几个注意事项: 1, 要为默认情况下,dubbo会将k8s里的pod ip地址作为注册服务的地址,所以这个地址需要被改写(ip测试过,行得通,而dns ...

  4. 日志框架学习(log4j2+slf4j)

    现在比较吊的就是这个log4j2这个日志框架了,功能强悍.slf4j是个日志框架的统一接口,方便扩展,切换框架啥的. 配置SSM+log4J2+SL4J https://blog.csdn.net/c ...

  5. alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!

    大家好! 多语言实现的案例:http://alidoing.com/或者http://www.alidoing.com/ 图:切换语言界面 JS代码实现: 1.首先新建一个对象langobj,当然对象 ...

  6. tomcat accesslog日志扩展

    由于工作需要,最近对tomcat的日志进行了一些研究,发现其日志大致可以分为两类,一类是运行日志,即平常我们所说的catalina.out日志,由tomcat内部代码调用logger打印出来的:另一类 ...

  7. 3.Java日志框架slf4j、jcl、jul、log4j1、log4j2、logback大总结

    一.slf4j.jcl.jul.log4j1.log4j2.logback JUL:JDK中的日志记录工具,也常称为JDKLog.jdk-logging. LOG4J1:一个具体的日志实现框架. LO ...

  8. Java日志框架那些事儿

    文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...

  9. Spring 5| 轻量级的开源JavaEE框架

    一.Spring框架的概述 1.Spring是轻量级的开源的JavaEE框架 2.Spring可以解决企业应用开发的复杂性 3.Spring有两个核心的部分:IOC(控制反转)和AOP(面向切面编程) ...

随机推荐

  1. Cool!15个超炫的 CSS3 文本特效【上篇】

    每一个网页设计师都希望创建出让用户能够赏识的网站.当然,这是不可能满足每个人的口味的.幸运的是,我们有最强大的工具和资源.实际上,我们非常多的网站模板,框架,内容管理系统,先进的工具和其他的资源可以使 ...

  2. [Python] Ubuntu12.04LTS

    Ubuntu 12.04LTS中缺省安装了Python2.7.3. python -h 查看可用选项 python -V 查看Python版本 下面写个简单的测试程序: 新建HelloWorld.py ...

  3. ansible入门

    前言 最近看了一下ansible,挺火的一个配置管理工具,对比老大哥puppet,使用起来要简单一些,并且可以批量执行命令,对比同是python语言编写的saltstack,不需要安装客户端(基于pa ...

  4. [转]virtualenv建立多个Python独立开发环境

    不同的人喜欢用不同的方式建立各自的开发环境,但在几乎所有的编程社区,总有一个(或一个以上)开发环境让人更容易接受. 使用不同的开发环境虽然没有什么错误,但有些环境设置更容易进行便利的测试,并做一些重复 ...

  5. MySQL 5.1 参考手册CHM (官方 简体中文版)

    点此下载: MySQL 5.1 参考手册CHM (官方 简体中文版) 在线文档:http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/

  6. mvc通过ActionFilterAttribute做登录检查

    1.0 创建Attribute using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  7. Servlet生命周期中的service方法分析

    问题ServletLifeCycle中的service方法内,有super.service(request, response); 会执行this.doGet(HttpServletRequest r ...

  8. Access is denied

    昨天有学习ASP.NET MVC的publish和IIS发行网站<简单的ASP.NET MVC发布>http://www.cnblogs.com/insus/p/4466200.html  ...

  9. Error Code: 1175.You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.

    在MySQL Workbench里面使用SQL语句: delete from 表名 提示出错: Error Code: 1175.You are using safe update mode and ...

  10. 关于MySQL里的found_row()和row_count()解释及用法 [复制链接]

        kider 电梯直达   1#    发表于 2010-8-31 16:06:04 | 只看该作者  |倒序浏览 |阅读模式   出处:mysqlpub.com MySQL中有两个函数来计算上 ...