log4j2使用总结
一、Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志级别,日志要输出的地方和日志格式
1、
Logger
Logger的日志级别有6级,分别是TRACE<DEBUG
< INFO < WARN < ERROR < FATAL 分别按照一定的等级来表示此条日志的重要程度
2、
appender常用的输出有控制台、文件、数据库等
二、Log4j2配置
1、web.xml配置文件
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> |
2、log4j2的配置文件:log4j2.xml
,建在类路径下
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?xml version="1.0" encoding="utf-8"?>
<Configuration status="off" monitorInterval="1800"> <properties> <property name="filename">d:/logs/log4j.log</property> </properties> <Appenders> <!--输出到控制台配置--> <Console name="Console"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss } %p %l %m%n" /> </Console> <!--输出到文件配置--> <RollingFile name="file" fileName="${filename}" filePattern="d:/logs/log4j--%d{yyyy-MM-dd}.log.gz"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %p %C:%L %m%n" /> <TimeBasedTriggeringPolicy interval="1" modulate="“true”" /> </RollingFile> </Appenders> <Loggers> <!--com.render包下的日志输出策略,输出warn级别及以上级别的日志到控制台和文件--> <Logger name="com.render" level="warn" additivity="false"> <AppenderRef ref=" Console" /> <AppenderRef ref="file" /> </Logger> <!--其它日志输出策略--> <Root level="error"> <AppenderRef ref="file" /> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> |
上述配置可以将日志打印到控制台的同时,保存到文件
除此之外,log4j2的JDBC Appender还支持将日志输出到数据库保存
首先,需要配置一个JNDI数据源,具体配置方式可参见:
[Tomcat下配置Jndi数据源](http://blog.csdn.net/kris234seth/article/details/46694971)
之后在上述log4j2的配置文件中新增Jdbc Appender之后的配置:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?xml version="1.0" encoding="utf-8"?>
<Configuration status="off" monitorInterval="1800"> <properties> <property name="filename">d:/logs/log4j.log</property> </properties> <Appenders> <!--输出到控制台配置--> <Console name="Console"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss } %p %l %m%n" /> </Console> <!--输出到文件配置--> <RollingFile name="file" fileName="${filename}" filePattern="d:/logs/log4j--%d{yyyy-MM-dd}.log.gz"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %p %C:%L %m%n" /> <TimeBasedTriggeringPolicy interval="1" modulate="“true”" /> </RollingFile> <!--JdbcAppender配置--> <JDBC name="JdbcAppender" tableName="logger"> <DataSource jndiName="java:/comp/env/jndi" /> <!--日期时间配置--> <Column name="eventDate" isEventTimestamp="true" /> <!--日志输出级别--> <Column name="level" pattern="%level" /> <!--日志对应的类--> <Column name="Class" pattern="%C:%L" /> <!--日志对应的方法--> <Column name="Method" pattern="%M" /> <!--日志内容--> <Column name="message" pattern="%message" /> <!--本次操作请求的ip地址--> <Column name="ip" pattern="%X{ip}" /> <!--本次操作请求的用户id--> <Column name="userid" pattern="%X{userid}" /> </JDBC> </Appenders> <Loggers> <!--com.render包下的日志输出策略,输出warn级别及以上级别的日志到控制台和文件--> <Logger name="com.render" level="warn" additivity="false"> <AppenderRef ref=" Console" /> <AppenderRef ref="file" /> </Logger> <!--其它日志输出策略--> <Root level="error"> <AppenderRef ref="file" /> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> |
说明:logger为保存日志的表名,jndiName为容器中配置的JNDI数据源的名称,column元素中的name属性为表的字段名
注意:上述配置中的最后2项,即用户id和ip地址(可以使其它任何信息)是需要单独来进行处理,才能在数据库保存成功,这时需要借助org.apache.log4j.MDC这个类来对id和ip进行设置。MDC是一个保存特定context数据的map,类似于session对象。具体使用方式如下:
|
1
2 3 4 5 6 |
;
...0”; MDC.put(“userid”, userid); MDC.put(“ip”, ip); logger.info(“来自ip地址为:” +ip + “, id为” +userid + “的用户请求”); |
注意:一定要在在日志打印语句之前进行id和ip信息(同样可以是其它任何需要的信息)的设置!
这样设置之后,在配置文件中就可以使用%X{ip}、%X{userid}来取到对应的值。
除此之外,对于要保存的一些公共的信息,每次在打印日志的时候都需要使用MDC来进行设置,这对于代码的书写时很繁琐的,解决这个问题,我们可以把这些信息的设置放置到一个过滤器中,在请求开始的时候就进行相关信息的设置,这样就不需要每次都单独设置了。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class AuthenticationFilter implements Filter
{ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest re = (HttpServletRequest) request //这里可以从request中获取到session中的用户相关信息、ip地址、请求的uri等等信息 try { MDC.put(); chain.doFilter(request, response); } finally { MDC.remove("userid "); } } } |
增加了过滤器之后还需要在web.xml文件中增加过滤器的相关配置,如下
<filter>
< filter-name > AuthFilter < /filter-name >
< filter-class > com.log4jmdc.AuthenticationFilter </filter-class >
</filter >
< filter-mapping >
< filter-name > AuthFilter </filter-name>
< url-pattern >/*</url-pattern>
</filter-mapping>
以上所有的配置都完成了,启动项目可以进行测试,看看日志有没有存到数据库吧!
log4j2使用总结的更多相关文章
- dubbox升级spring到4.x及添加log4j2支持
今天花了点时间,把dubbox依赖的spring从3.x升级成最新版的4.x了,其它一些依赖的组件也顺带升级了,同时dubbo支持的第三方日志组件居然没有log4j2,加了点代码也一并支持了,蛋疼的是 ...
- 聊一聊log4j2配置文件log4j2.xml
一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...
- log4j2.xml实用例子
一个多月前,我写了篇关于log4j.xml配置的文章,点击此处查看:http://www.cnblogs.com/guogangj/p/3931397.html 最近,我把自己的log4j升级到2.0 ...
- log4j2 不使用配置文件,动态生成logger对象
大家平时使用Log4j一般都是在classpath下放置一个log4j的配置文件,比如log4j.xml,里面配置好Appenders和Loggers,但是前一阵想做某需求的时候,想要的效果是每一个任 ...
- Log4j2 - 配置
官方文档:http://logging.apache.org/log4j/2.x/index.html 1 概述 Log4j2的配置包含四种方式,其中3种都是在程序中直接调用Log4j2的方法进行配置 ...
- MyBatis - MyBatis使用log4j2显示sql和结果集
mybatis-config.xml <settings> <setting name="logImpl" value="LOG4J2" /& ...
- web项目 log4j2的路径问题
项目中用到log4j2记录日志,结果运行的时候总也不见log文件的产生. 查看官方文档得知,在web项目中使用log4j2需要加入log4j-web包 log4j2.xml <?xml vers ...
- 在java下使用log4j2记录日志
1.定义: log4j2 指log4j 2.X及以上版本 2.安装 log4j-core-xx.jarlog4j-api-xx.jarlog4j-web-xx.jar(web项目的需要引用) 3.配置 ...
- log4j2配置详解
1. log4j2需要两个jar log4j-api-2.x.x.jar log4j-core-2.x.x.jar .log4j和log4j2有很大的区别,jar包不要应错. 2. ...
随机推荐
- web rest api tools
https://chrome.google.com/webstore/search/postman-REST%20Client
- [HIHO1318]非法二进制(动态规划)
题目链接:http://hihocoder.com/problemset/problem/1318 题意:是个dp题.考虑二进制数为i位的时候,无非有两种情况:新添加的一位为0或者1. 为0的时候,那 ...
- CFF前端沙龙总结
一. -OOCSS + Sass ——大漠 1. OOCSS 结构<=>皮肤 分离 容器<=>内容 分离 2. Sass 工具.处理器 SCSS(CSS风格)<=> ...
- WEBBROWSER中模拟鼠标点击(SendMessage/PostMessage)
好久没有写文章,发一篇顶顶博客访问量.别人建议转一些比较好的代码也贴过来,但是我打算这里主要发自己原创的代码,所以么..流量该多少就多少吧... 回到主题,在webbrowser中点击某链接网上几乎都 ...
- LeetCode: pow
Title: https://leetcode.com/problems/powx-n/ 思路:二分.使用递归或者非递归.非递归有点难理解.pow(0,0)=1 递归的方法是将n为负数的用除法解决.有 ...
- shell脚本实例
备注:一些与传递给shell的参数相关的变量:$# 命令行参数的个数$? 调用命令的返回值$$ 当前进程的进程号$! 最后一个后台命令的进程号$0 命令行的第一个参数,也就是命令名$n 命令行的第n个 ...
- 【周期串】NYOJ-1121 周期串
[题目链接:NYOJ-1121] 例如:abcabcabc 该字符串的长度为9,那么周期串的长度len只可能为{1,3,9},否则就不可能构成周期串. 接下来,就是要在各周期间进行比较.描述不清... ...
- 如何使用 orachk 工具
Oracle RAC 安装完毕后的健壮性是一个令人头疼的问题.之前Oracle为之专门推出了raccheck工具,确实方便了我们这些个苦逼的DBA.现在Oracle在raccheck的基础之上又推出了 ...
- yum install错误 系统环境:Oracle Linux5.4 在通过yum安装软件时出现以下错误:
1.yum配置文件 1 [root@rh168 yum.repos.d]# cat yum.repo 2 [base] 3 name=Oracle linux 4 baseurl=file:/// ...
- iOS开发:AFNetworking、MKNetworkKit和ASIHTTPRequest比较
转:http://www.xue5.com/Mobile/iOS/747036.html 之前一直在使用ASIHTTPRequest作为网络库,但是由于其停止更新,iOS7上可能出现更多的问题,于是决 ...