没有接触过的,先了解一下:log4j教程

部分内容来:log4j教程 感谢!

需要导入包:

log包:log4j-12.17.jar

第一步:web.xml配置

<!-- log4j配置,文件路径,因为是跟随项目启动 -->
<context-param>     <param-name>log4jConfigLocation</param-name>     <param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<!-- 配置log4j.xml变量,如果需要动态的就使用下面方式,使用方法${name} -->
<context-param> <param-name>controller</param-name> <param-value>controller-log</param-value>
</context-param> <context-param> <param-name>loggingLevel</param-name> <param-value>info</param-value>
</context-param> <!-- 加载log4j配置文件 --><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>

第二步log4j.xml配置

(配置文件可以有两种方式,一种是xml,一种是properties。个人比较喜欢xml,一目了然)

先讲解一下核心对象:

logger对象: Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。

Appender对象:下位层提供Appender对象。Appender对象负责发布日志信息,以不同的首选目的地,如数据库,文件,控制台,UNIX系统日志等。

layout对象: 该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。

打个比方:logger是个情报站,负责收集他 所在地方(用name="xxx包"指定)下的所有信息。appender是发送出去的方式,如写信(FileAppender)、电报(SMTPAppender)等多种。layout就是发送内容以什么格式书写,如自定义格式(PatternLayout),html(HTMLLayout)格式。

<?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/">
<!-- 可以配置多个appender来对应不同的输出,如文件输出,sql输出,控制台输出,邮件输出等 -->  <!-- [控制台STDOUT] 不同的输出类型对应着不同的calss,如控制台输出class对应着 org.apache.log4j.ConsoleAppender -->  <appender name="console" class="org.apache.log4j.ConsoleAppender">  <!-- name提供给logger或者root调用 --><param name="encoding" value="GBK" />  <!-- 保存字符集 --><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="warn" />  <param name="AcceptOnMatch" value="true" />  <!-- 答案:http://bbs.csdn.net/topics/350195913 --></filter>  </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="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>  <!-- [debug日志APPENDER] -->  <appender name="DEBUG-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">  <param name="File" value="${webapp.root}/logs/controller/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/controller/info-log.log" />  <param name="Append" value="false" />  <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="LevelMax" value="info"/>     <param name="LevelMin" value="info"/>     </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>  <!-- debug log -->  <!-- name指定的是包名,表示这个logger只记录com.wzw.controller下的所有日志 --><logger name="com.wzw.controller" additivity="true">  <!-- additivity 是否继承root --><!-- <level value="${loggingLevel}" />   --><level value="DEBUG"></level>  <!-- 现在级别 --><appender-ref ref="DEBUG-APPENDER" />  </logger>  <!-- info log -->  <!-- name指定的是包名,这样只操作此包下的log --><logger name="com.wzw.controller" additivity="true">  <level value="INFO"></level>  <appender-ref ref="INFO-APPENDER" />  <appender-ref ref="console"/></logger>  <!-- Root Logger -->  <!-- 所有logger的父类,记录所有的日志。 --><root> <level value="ALL"></level>  <!-- 限定记录等级 --><appender-ref ref="DEFAULT-APPENDER" />  <!-- 调用记录方式 --><appender-ref ref="console"/></root>  </log4j:configuration>  

运行就能看到common-default.log里面有操作日志

自己输出日志:

我controller包下某各类中:

package com.wzw.controller;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/account")
public class AccountController {private static Logger logger =LoggerFactory.getLogger(AccountController.class);
@ResponseBody@RequestMapping("/login")public String login(HttpSession session){logger.info("请求登录");logger.debug("debug");logger.warn("warn");
}
}

访问这个controller,就会记录日志,因为有log4j中有两个logger配置记录controller包下的日志,所以输出到两个logger下<appender-ref>(输出方式)。

appender选项:

  • AppenderSkeleton

  • AsyncAppender

  • ConsoleAppender

  • DailyRollingFileAppender

  • ExternallyRolledFileAppender

  • FileAppender

  • JDBCAppender

  • JMSAppender

  • LF5Appender

  • NTEventLogAppender

  • NullAppender

  • RollingFileAppender

  • SMTPAppender

  • SocketAppender

  • SocketHubAppender

  • SyslogAppender

  • TelnetAppender

  • WriterAppender

layout选项:

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

模式转换字符:

下表说明了以上模式使用的字符和所有其他字符,可以在自定义模式中使用:

转换字符 表示的意思
c 用于输出的记录事件的类别。例如,对于类别名称"a.b.c" 模式  %c{2} 会输出 "b.c"
C 用于输出呼叫者发出日志请求的完全限定类名。例如,对于类名 "org.apache.xyz.SomeClass", 模式 %C{1} 会输出 "SomeClass".
d 用于输出的记录事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
F 用于输出被发出日志记录请求,其中的文件名
l 用于将产生的日志事件调用者输出位置信息
L 用于输出从被发出日志记录请求的行号
m 用于输出使用日志事件相关联的应用程序提供的消息
M 用于输出发出日志请求所在的方法名称
n 输出平台相关的行分隔符或文字
p 用于输出的记录事件的优先级
r 用于输出毫秒从布局的结构经过直到创建日志记录事件的数目
t 用于输出生成的日志记录事件的线程的名称
x 用于与产生该日志事件的线程相关联输出的NDC(嵌套诊断上下文)
X 在X转换字符后面是键为的MDC。例如  X{clientIP} 将打印存储在MDC对键clientIP的信息
% 文字百分号 %%将打印%标志

格式修饰符:

默认情况下,相关资料原样输出。然而,随着格式修饰符的帮助下,可以改变最小字段宽度,最大字段宽度和对齐。

下表涵盖了各种各样的修饰符的情况:

Format modifier left justify minimum width maximum width 注释
%20c false 20 none 用空格左垫,如果类别名称少于20个字符长
%-20c true 20 none 用空格右垫,如果类别名称少于20个字符长
%.30c NA none 30 从开始截断,如果类别名称超过30个字符长
%20.30c false 20 30 用空格左侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
%-20.30c true 20 30 用空格右侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。

转载于:https://www.cnblogs.com/v-weiwang/p/4814050.html

springmvc+log4j操作日志记录,详细配置相关推荐

  1. 共享服务器文件归档,如何实现共享文件访问记录方法、共享文件管理和共享文件操作日志记录.docx...

    文档 文档 PAGE / NUMPAGES 文档 如何实现共享文件访问记录方法.共享文件管理和共享文件操作日志记录 企业单位,办公都有应用到共享文件,经常会在文件共享服务器上存储单位一些重要的共享文件 ...

  2. Django中间件实现操作日志记录

    Django中间件实现操作日志 本文通过Django中间件的流程,实现操作日志记录的功能,模块化.拿来即用. 功能描述:通过中间件记录 请求时间.操作用户.请求URL.请求方法.请求IP.请求参数和响 ...

  3. qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...

  4. 如何实现操作操作日志记录

    如何实现操作操作日志记录 为什么要记录操作日志? 项目中的业务需求,需要针对用户的一些业务操作做操作记录, 也就是标题中的操场日志记录,最近做的项目也有这个需求, 我也是第一次写,相信有很多开发者也有 ...

  5. AOP实现操作日志记录

    一.设计: 操作日志记录 根据业务场景 一般是需要记录下数据修改更新的日志,查询类可以忽略. 所以需要对指定的某些方法进行记录.这块希望可以结合注解灵活操作,对于注解的方法进行日志记录 操作日志表设计 ...

  6. MySQL的操作日志记录

    如何配置mysql数据库的操作日志及如何查看mysql的操作日志记录 MySQL的几种操作日志 1.错误日志 log_error (主要是记录启动.运行.停止mysql时出现的致命问题,系统级别的错误 ...

  7. JPOM - AOP+自定义注解实现操作日志记录

    文章目录 地址 版本 源码解析-AOP+自定义注解实现操作日志记录 地址 Gitee: https://gitee.com/dromara/Jpom 官网: https://jpom.io/ 一款简而 ...

  8. 利用SpringMVC的AOP来实现后台系统的操作日志记录

    最近在项目中要求把后台的一些关键操作记录下来,想了好半天能想到的也就那两三种方式,要么就是写一个拦截器,然后再web.xml里面进行配置,要么就是就是在每个需要记录操作日志的代码里面进行拦截,最后我选 ...

  9. 如何配置mysql数据库的操作日志及如何查看mysql的操作日志记录

    MySQL的几种操作日志 1.错误日志 log_error (主要是记录启动.运行.停止mysql时出现的致命问题,系统级别的错误记录) 2.查询日志 log (主要记录数据库建立的客户端连接和执行的 ...

最新文章

  1. python使用TSNE为影像组学(radiomics)数据进行降维可视化分析
  2. 谈谈JQuery的Deferred对象
  3. java css隔行变色_JS+CSS实现Li列表隔行换色效果的方法
  4. C++回调机制的几种实现方式
  5. java canvas画图,UWP Canvas绘图越界
  6. linux update语句,MySQL 多表 update sql语句总结
  7. 【转】建立公用程序库,提升软件开发生产力
  8. 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
  9. java 内存泄漏样例_一次线上Java应用内存泄漏分析实例
  10. 我为什么放弃了 Chrome?
  11. .net 怎么使用github_超快组装软件的使用hifiasm软件
  12. mysql 基础教程 很全
  13. c语言将时速转换成配速,配速与时速换算(跑步配速和时速换算)
  14. word中删除多余的空白页
  15. word的页脚页码从9开始后面全是1,怎么解决?
  16. 护眼体验新升级,引领2023护眼风潮,南卡Pro护眼台灯评测报告
  17. 在北京开公司,搬家后如何变更税务和工商?
  18. 游戏引擎编程需要哪些基本数学知识?
  19. 数据结构和算法 第六天内核链表是链表的终结者
  20. 【Android源码面试宝典】MMKV从使用到原理分析(二)

热门文章

  1. React Native中文网
  2. ansible 安装和使用
  3. 30.MIN() 函数
  4. 内部使用final参数的原因
  5. 简化PHP开发的10个工具
  6. 将资源文件中的数据写回磁盘
  7. jdk5.0新特性—— 枚举
  8. Docker宣布企业版支持Windows Server 2019
  9. 理解 iOS 和 macOS 的内存管理
  10. Hive中文注释乱码解决方案