• 导入依赖的jar包

  

<log4j.version>1.2.16</log4j.version>

<!-- 自动引入slf4j-api.jar,log4j.jar,以及slf4j-log4j12.jar-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
  • web.xml中配置Log4j

  

<!-- 配置log4j.xml监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 配置加载log4j.xml文件路径 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.xml</param-value>
</context-param>
<!-- 配置log4j.xml变量,如果需要动态的就使用下面方式,使用方法${name} -->
<context-param>
<param-name>errorLevel</param-name>
<param-value>ERROR</param-value>
</context-param>
<context-param>
<param-name>infoLevel</param-name>
<param-value>INFO</param-value>
</context-param>
<context-param>
<param-name>debugLevel</param-name>
<param-value>DEBUG</param-value>
</context-param>
<context-param>
<param-name>rootLevel</param-name>
<param-value>ALL</param-value>
</context-param>
  • mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J" /><!-- 这里不加也可以实现sql打印,估计内部有这方面的检测规则 -->
</settings>
<!-- 实体类,简称 -设置别名 -->
<typeAliases>
<typeAlias alias="User" type="com.only.mate.entity.User" />
</typeAliases>
<!-- 实体接口映射资源 -->
<!-- 说明:如果xxMapper.xml配置文件放在和xxMapper.java统一目录下,mappers也可以省略,
因为org.mybatis.spring.mapper.MapperFactoryBean默认会去查找与xxMapper.java相同目录和名称的xxMapper.xml -->
<mappers>
<mapper resource="com/only/mate/mapper/UserMapper.xml" />
</mappers>
</configuration>
  • 引入Log4j.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--
off:************最高等级的,用于关闭所有日志记录
fatal(Object message):输出FATAL级别的消息。
error(Object message):输出ERROR级别的消息。
warn (Object message):输出WARN级别的消息。
info (Object message):输出INFO级别的消息。
debug(Object message):输出DEBUG级别的消息。
trace(Object message):输出TRACE级别的消息。
all:************最低等级的,用于打开所有日志记录
注:只有当输出日志的级别大于或等于为日志配置器配置的日志级别时,这个方法才会执行
--> <!-- 可以配置多个appender来对应不同的输出,如文件输出,sql输出,控制台输出,邮件输出等 -->
<!-- [控制台STDOUT] 不同的输出类型对应着不同的calss,如控制台输出class对应着 org.apache.log4j.ConsoleAppender -->
<appender name="console" class="org.apache.log4j.ConsoleAppender"> <!-- name提供给logger或者root调用 -->
<param name="encoding" value="UTF-8" /> <!-- 保存字符集 -->
<param name="target" value="System.out" /> <!-- 输出到控制台 -->
<layout class="org.apache.log4j.PatternLayout"> <!-- loyout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式 -->
<param name="ConversionPattern"
value="%d{ISO8601} 耗时:%r 日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m%n" /> <!-- 输出格式,后面解释 -->
</layout>
<!--filter过滤器设置输出的级别:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF 所有下面输出的是debug到warn不会有error和fatal -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="FATAL" />
<param name="AcceptOnMatch" value="TRUE" />
</filter>
<!-- 设置Filter:
包括选择过滤器和设置过滤条件,可选择的过滤器包括:LogLevelMatchFilter、LogLevelRangeFilter、和StringMatchFilter:
对LogLevelMatchFilter来说,过滤条件包括LogLevelToMatch和AcceptOnMatch(true|false), 只有当log信息的LogLevel值与LogLevelToMatch相同,且AcceptOnMatch为true时才会匹配。
LogLevelRangeFilter来说,过滤条件包括LogLevelMin、LogLevelMax和AcceptOnMatch,只有当log信息的LogLevel在LogLevelMin、LogLevelMax之间同时AcceptOnMatch为true时才会匹配。
对StringMatchFilter来说,过滤条件包括StringToMatch和AcceptOnMatch,只有当log信息的LogLevel值与StringToMatch对应的LogLevel值与相同, 且AcceptOnMatch为true时会匹配。
过滤条件处理机制类似于IPTABLE的Responsibility chain,(即先deny、再allow)不过执行顺序刚好相反,后写的条件会被先执行,比如:
log4cplus.appender.append_1.filters.1=log4cplus::spi::LogLevelMatchFilter
log4cplus.appender.append_1.filters.1.LogLevelToMatch=TRACE
log4cplus.appender.append_1.filters.1.AcceptOnMatch=true
log4cplus.appender.append_1.filters.2=log4cplus::spi::DenyAllFilter
会首先执行filters.2的过滤条件,关闭所有过滤器,然后执行filters.1,仅匹配TRACE信息
-->
</appender> <!-- [公共Appender] 这个class表示输入到文件,并且按日期生成新文件 -->
<appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/common-default.log" /> <!-- ${webapp.root}项目根路径,自动获得,不用配置,可自己在web.xml中配置 -->
<param name="MaxFileSize" value="10MB"/><!-- 文件大小不超过10MB -->
<param name="MaxBackupIndex" value="10"/><!-- 保留10个备份文件 -->
<param name="Append" value="TRUE" /> <!-- 是否项目重启继续保存之前日志 -->
<param name="encoding" value="GBK" />
<param name="threshold" value="ALL" /> <!-- 记录所有类型日志,记录它和比它等级高的日志ALL<DEBUG -->
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <!-- 日期格式 例子:common-default.log.2015-09-17.log -->
<layout class="org.apache.log4j.PatternLayout"> <!-- 输出方式 -->
<param name="ConversionPattern"
value="%d{ISO8601} 耗时:%r 日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m%n" />
</layout>
</appender> <!-- [错误日志APPENDER] -->
<appender name="ERROR-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/error-log.log" />
<param name="Append" value="TRUE" />
<param name="encoding" value="GBK" />
<param name="threshold" value="ERROR" /> <!-- 记录所有类型日志,记录它和比它等级高的日志ALL<DEBUG -->
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} 耗时:%r 日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m%n" />
</layout>
</appender> <!-- [debug日志APPENDER] -->
<appender name="DEBUG-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/debug-log.log" />
<param name="Append" value="true" />
<param name="encoding" value="GBK" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} 耗时:%r 日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m%n" />
</layout>
</appender> <!-- [info日志APPENDER] -->
<appender name="INFO-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/info-log.log" />
<param name="Append" value="TRUE" />
<param name="encoding" value="GBK" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} 耗时:%r 日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m%n" />
</layout>
<!-- 我只想记录INFO以上级别日志,就做如下设置 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="FATAL" />
</filter>
</appender> <!-- [组件日志APPENDER] -->
<appender name="COMPONENT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/logistics-component.log" />
<param name="Append" value="TRUE" />
<param name="encoding" value="GBK" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} 耗时:%r 日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m%n" />
</layout>
</appender> <!-- 日志写出器 error log -->
<logger name="ErrorLogger">
<level value="ERROR" />
<!-- <level value="${errorLevel }" /> --> <!-- 这种方式level读取不了web.xml中的值,都是debug -->
<appender-ref ref="COMPONENT-APPENDER" />
<appender-ref ref="ERROR-APPENDER" />
</logger> <!-- 日志写出器 debug log -->
<logger name="debugLogger" additivity="true"> <!-- additivity是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下 子Logger 会继承 父Logger 的appender,也就是说 子Logger 会在 父Logger 的appender里输出。若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出 -->
<level value="DEBUG" /> <!-- 现在级别 -->
<!-- <level value="${debugLevel}" /> --> <!-- 这种方式level读取不了web.xml中的值,都是debug -->
<appender-ref ref="DEBUG-APPENDER" />
</logger> <!-- 日志写出器 info log -->
<!-- name指定的是包名,表示这个logger只记录com.only.mate下的所有日志 -->
<logger name="com.only.mate" additivity="true">
<level value="INFO" />
<!-- <level value="${infoLevel}" /> --> <!-- 这种方式level读取不了web.xml中的值,都是debug -->
<appender-ref ref="INFO-APPENDER" />
</logger> <!-- 日志写出器Root Logger -->
<!-- 所有logger的父类,记录所有的日志。 -->
<root>
<level value="ALL" /> <!-- 限定记录等级 -->
<appender-ref ref="DEFAULT-APPENDER" /> <!-- 调用记录方式 -->
<appender-ref ref="console" />
</root> </log4j:configuration>

注意:动态配置<level value="${infoLevel}" />这样的方式level读取不到web.xml中的值,都是debug,具体原因不清楚

  • 调用
public class UserController {
private static Logger logger = LoggerFactory.getLogger(UserController.class);
private static Logger debugLogger = LoggerFactory.getLogger("DebugLogger");
private static Logger errorLogger = LoggerFactory.getLogger("ErrorLogger");   @ResponseBody
@RequestMapping(value="/login")
public Map<String, Object> login(HttpServletRequest req, HttpServletResponse res){
Map<String, Object> response = new HashMap<String, Object>();
response.put("state", "0"); String username = req.getParameter("username");
String password = req.getParameter("password");
logger.debug("登录,用户名{},密码{}", username, password);
debugLogger.debug("登录,用户名{},密码{}", username, password);
errorLogger.debug("登录,用户名{},密码{}", username, password);
if(StringUtils.isNotBlank(username)){
User user = userService.findOne(username);
if(user != null){
if(user.getPassword().equals(password)){
response.put("state", "1");
response.put("data", user);
}else {
response.put("message", "账户或密码错误!");
logger.error("账户或密码错误!");
debugLogger.error("账户或密码错误!");
errorLogger.error("账户或密码错误!");
}
}else {
response.put("message", "此账户不存在!");
logger.error("此账户不存在!");
errorLogger.error("此账户不存在!");
}
}else {
response.put("message", "输入有误!");
logger.error("登录出错!");
errorLogger.error("登录出错!");
}
return response;
}
}

完成。


 

Spring+Log4j的集成总结的更多相关文章

  1. 细说shiro之五:在spring框架中集成shiro

    官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ...

  2. 写给大忙人的CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南

    现在的公司由于绝大部分项目都采用分布式架构,很早就采用ELK了,只不过最近因为额外的工作需要,仔细的研究了分布式系统中,怎么样的日志规范和架构才是合理和能够有效提高问题排查效率的.经过仔细的分析和研究 ...

  3. ELK学习笔记之CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日志集成环境搭建

    0x00 简介 现在的公司由于绝大部分项目都采用分布式架构,很早就采用ELK了,只不过最近因为额外的工作需要,仔细的研究了分布式系统中,怎么样的日志规范和架构才是合理和能够有效提高问题排查效率的. 经 ...

  4. Spring和ActiveMQ集成实现队列消息以及PUB/SUB模型

    前言:本文是基于Spring和ActiveMQ的一个示例文章,包括了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,只是做了比较简单的实现,无任何业务方面的东西,作为一个 ...

  5. Spring Boot:集成Druid数据源

    综合概述 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据 ...

  6. Spring+SpringMVC+MyBatis集成(SSM)

    1.导入需要用到的jar包 <dependencies> <!--Spring核心包--> <dependency> <groupId>org.spri ...

  7. Spring Boot 项目集成 Alibaba Druid

    Druid 是一个非常好用的数据库连接池,但是他的好并不止体现在作为一个连接池加快数据访问性能上和连接管理上,他带有一个强大的监控工具:Druid Monitor.不仅可以监控数据源和慢查询,还可以监 ...

  8. 在spring环境下集成ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...

  9. 【原】Spring与MongoDB集成:配置

    MongoDB的API提供了DBObject接口来实现BSONObject的操作方法,BasicDBObject是具体实现.但是并没有提供DBObject与BeanObject的转换.在还没有了解到与 ...

随机推荐

  1. BZOJ5297 CQOI2018 社交网络 【矩阵树定理Matrix-Tree】

    BZOJ5297 CQOI2018 社交网络 Description 当今社会,在社交网络上看朋友的消息已经成为许多人生活的一部分.通常,一个用户在社交网络上发布一条消息(例如微博.状态.Tweet等 ...

  2. python(十三):网络编程之socket与socketserver

    socket是操作系统中I/O系统延伸部分,支持TCP和UDP等网络通信协议,它使计算机之间(或其本身)的进程通信称为可能.socket中的socket()函数.recv()函数和send()函数,相 ...

  3. Python学习-购物车程序

    程序:购物车程序 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 ...

  4. Java Garbage Collection

    在C/C++中,需要自己负责object的creation 和 destruction. 如果忘记了destruction, 就容易出现OutOfMemoryErrors. Java中会有GC直接处理 ...

  5. 基于Video4Linux的视频采集模块开发(转)

    Linux系统中,摄像头驱动程序安装好后,为了进行视频采集必须加入Video4Linux模块,从而可以通过Video4Linux模块提供的编程接口(API)从摄像头设备中获取图像帧.下面具体研究基于V ...

  6. (转)Tomcat迁移JBoss杂症—不识别及不能解析web.xml

    本文介绍了在将tomcat下的web工程迁移到jboss下面时遇到的问题 背景: Tomcat 7.0 JBoss AS 4.2.2 IED: Eclipse Java EE IDE for Web ...

  7. (转)Linux查看CPU,硬盘,内存的大小

         分类: linux(21)  在Linux的桌面版本中,查看这些东西的确很方便,有图形化的工具可以使用.但是在Linux服务器版上,或者远程ssh连接的时候,就没有图形化的界面可以操作了.此 ...

  8. easyui datagrid 基础方法和事件

    数据表格属性(DataGrid Properties) 属性继承控制面板,以下是数据表格独有的属性. 名称 类型 描述 默认值 columns array 数据表格列配置对象,查看列属性以获取更多细节 ...

  9. Mac环境下PHPstorm配置xdebug开发调试web程序

    一.安装PHP的xdebug扩展 安装xdebug(技巧,为了找到适配的版本,让xdebug网站根据phpinfo()函数输出分析找到对应的方法及安装步骤:如果安装了多个PHP版本的话,尽量用phpi ...

  10. ubuntu 进入单用户模式

    进入单用户模式:  按shift进入 1.开机到grub时,用上下键移到第二行的恢复模式,按e(注意不是回车) 即Ubuntu,With Linux 3.2.0-23-generic(recovery ...