为了让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. S Gallery – 很有特色的响应式 jQuery 相册插件

    S Gallery 是一款响应式的 jQuery 相册插件.使用了 HTML5 全屏 API 以及 CSS3 动画 和 CSS3 转换,所以只能在支持这些功能的浏览器中使用. 这款插件它有一个特色功能 ...

  2. javascript学习笔记(四):事件处理函数和动态创建html标记。

    1 HTML的事件属性  全局事件属性:HTML 4 增加了使事件在浏览器中触发动作的能力,比如当用户点击元素时启动 JavaScript. a. Window 事件属性,针对 window 对象触发 ...

  3. Windows Azure Cloud Service (41) 修改云服务IIS托管管道模式为4.0经典模式

    <Windows Azure Platform 系列文章目录> 这是笔者在之前的项目中遇到的问题,做一下总结,给网友做参考. 在一般情况下,Visual Studio开发的Cloud Se ...

  4. Android SDK Manager国内更新代理

    在Android SDK Manager Setting 窗口设置HTTP Proxy server和HTTP Proxy Port这个2个参数,分别设置为: HTTP Proxy server:mi ...

  5. Windows Server 2016正式版14393英文版ISO镜像下载:_X64FRE_ZH-CN.ISO

    http://care.dlservice.microsoft.com/dl/download/F/8/3/F83C7D26-787A-4F43-82B0-7C7BF8A12791/14393.0.1 ...

  6. C语言学习002:第一个完整的C程序代码

    #include <stdio.h>//引用相关的外部库,stdio.h包含了终端读写数据的代码 //程序入口,程序通过main函数的返回值判断程序是否运行成功,0表示成功,非0表示程序运 ...

  7. 基于ListBox的相关操作

    Winform中两个listbox的操作是平时比较常用的操作. 本次将以一个Winform实例来分享一下两个listbox的操作,包括:listbox添加项,项的上移下移等操作. 假设有两个listb ...

  8. Tarjan算法---强联通分量

    1.基础知识 在有向图G,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大强连通子 ...

  9. Nancy Scripts,CSS文件夹配置

    public class Bootstrapper : DefaultNancyBootstrapper { protected override void ConfigureConventions( ...

  10. C#删除程序自身【总结】

    偶然看到一个可以自删除的程序,于是了解下如何实现.然后整理如下: 思路: 在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路:  在关闭本程序之前启动新的进程打开另 ...