为了让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. 《HelloGitHub月刊》第05期

    <HelloGitHub>第05期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 欢迎各路人士加入本项目,丰富月刊的内容,也可以直接在Issue(需要登录gi ...

  2. 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

    一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...

  3. T-SQL中jion操作

    --创建学生表 create table Students( sno nvarchar(10) not null primary key, name nvarchar(30) not null, ge ...

  4. 设置Android程序图标

    先在/res/drawable/目录下放一个叫icon.png的图标图片(48×48),并且在/res/values/strings.xml中定义app_name 修改<string name= ...

  5. storm坑之---同步问题

    最近在做一个监控系统,用来监控网站上各个业务功能的调用量以及处理时间,以便及时发现问题,及时处理.做这种实时统计处理系统,自然首先想到了storm,于是现学现用,自然遇到了一些坑,而且不少是网上也难以 ...

  6. Azure SQL Database (1) 用户手册

    <Windows Azure Platform 系列文章目录> 最新更新2016年6月17日 下载地址:Azure SQL Database用户手册

  7. 使用Uploadify(UploadiFive)多文件上传控件遇到的坑

    最近项目中需要实现多文件上传功能,于是结合需求最终选择了Uploadify这一款控件来实现.相比其他控件,Uploadify具有简洁的界面,功能API基本可以解决大多数需求,又是基于jquery的,配 ...

  8. 我的游戏蜗牛web前端面试经历

    蜗牛在江苏苏州地区应该算是比较大的互联网公司了,可以称得上中国游戏的鼻祖,之前一直很想进蜗牛,但作为一个应届毕业生却没有看到蜗牛发布任何关于招聘实习生的职位,无奈之下于是就毛遂自荐了,主动以邮件的形式 ...

  9. JavaScript基础—插曲

    Javascript基础 1:js中我们最好使用单引号,其实可以使用双引号的但是为了区别所以js中全部使用单引号.注释和C#的是一样的.网页里面的执行顺序是从上到下依次执行的,不管你js放到哪里,都会 ...

  10. jquery的ready事件的实现机制浅析

    页面初始化中,用的较多的就是$(document).ready(function(){//代码}); 或 $(window).load(function(){//代码}); 他们的区别就是,ready ...