springmvc+log4j操作日志记录,详细配置
来源:互联网 发布:javascript 加载顺序 编辑:程序博客网 时间:2024/06/05 12:50
需要导入包:
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
模式转换字符:
下表说明了以上模式使用的字符和所有其他字符,可以在自定义模式中使用:
格式修饰符:
默认情况下,相关资料原样输出。然而,随着格式修饰符的帮助下,可以改变最小字段宽度,最大字段宽度和对齐。
下表涵盖了各种各样的修饰符的情况:
- springmvc+log4j操作日志记录,详细配置
- springmvc+log4j.xml操作日志记录,详细配置
- springMVC+log4j 日志记录详细配置
- SpringMvc配置Log4j日志
- 【Log4J】Log4j记录日志配置
- log4j配置syslog记录日志
- springmvc 切面记录操作日志
- springmvc 切面记录操作日志
- Log4J日志文件的详细配置
- Log4j 的日志配置(超详细)
- log4j日志的配置详细说明
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- ZT log4j配置syslog记录日志
- log4j配置相对路径实现日志记录
- 使用log4j.xml配置系统记录日志
- 打开idea目录结构
- Spring的静,动 态代理(jdk,cglib)
- Tomcat中配置虚拟目录,使得文件与Tomcat服务器分离
- 01 Gym
- 如何加载xml配置文件和proprieties
- springmvc+log4j操作日志记录,详细配置
- 循环嵌套和辅助语句
- 数据结构:树之定义与一些基本术语
- 数组去重
- Hexo Next博客搭建
- HTTP中GET和POST的区别
- Java多线程任务超时结束的5种实现方法
- 2106 蓝桥杯 愤怒小鸟
- Oracle的正确卸载步骤