1.记录Spring版本为4.0.4.RELEASE的日志记录
本文档初衷是在我想要打印使用Jdbctemplate来打印执行的SQL时想让SQL打印在控制台,并且记录定时记录错误日志,所以才有如下的文章
所有的错误日志只有在捕获了的情况下才会记录,不然只会抛错误在控制台。如果捕获了错误的话那么是不会阻止程序运行的。
本次记录的环境配置为Idea+tomcat7,开发web项目
(1)引入依赖的jar包,使用的是Maven,Spring依赖需要的jar这里就不展示出来了。
<log4j.version>2.8</log4j.version>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
(2)在web.xml文件中,需要配置log4j.properties文件的所在位置,并且配置Log4j的监听器。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
(3)在log4j.properties的文件内容
log4j.rootLogger = DEBUG,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d][%-5p]:%m %n
org.springframework.jdbc.core=debug # 打印SQL语句
org.springframework.jdbc.core.StatementCreatorUtils=trace,file # 打印JdbcTemplate的参数
2.记录Spring版本为5.2.5.RELEASE的日志记录
这里日志记录是使用的是log4j2
(1)引入的jar依赖如下。
<log4j2-version>2.10.0</log4j2-version>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2-version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j2-version}</version>
</dependency>
(2)由于log4j2的很多配置已经由Spring帮你完成了,仅限于Spring高版本。所以在web.xml文件就不再需要log4j2的文件地址。只需要在你的类路径下配置一个log4j2.xml文件就行了。不能使用log4j.properties会导致Spring识别不出来
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
<Logger name="org.springframework.jdbc.core" level="debug"/> # 打印Jdbctemplate的SQL
<Logger name="org.springframework.jdbc.core.StatementCreatorUtils" level="trace"/> # 打印SQL的参数
</Loggers>
</Configuration>
(3)至此,在Spring5中配置日志记录就已经完成。仅供个人参考
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss ,SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
比如本人常用的一些格式:
输出到控制台的信息: [%d][%-5p]:%m %n
输出到错误文件中的信息: %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
%d{yyyy-MM-dd HH:mm:ss a} 这一段表示2020-05-25 09:26:18 上午
还有其他的信息展示形式可根据项目需要自行组合。
log4j配置错误日志信息:
log4j.rootLogger = debug,stdout,R
log4j.appender.R= org.apache.log4j.DailyRollingFileAppender
# 每分钟打印年-月-日-分
log4j.appender.R.DatePattern='_'yyyy-MM-dd-HH-mm
# ${catalina.home} 是指启动服务器的的根路径
#log4j.appender.R.file= ${catalina.home}/WEB-INF/logs/error.log
# ${webApp.root} 是指发布到Tomcat后,在webapps/项目名 中的项目路径
log4j.appender.R.file= ${webApp.root}/WEB-INF/logs/error.log
# 日志输出级别,这里是指输出ERROR错误级别的日志。
log4j.appender.R.Threshold= ERROR
log4j.appender.R.Append= true
#日志中输出的日志的格式
log4j.appender.R.layout= org.apache.log4j.PatternLayout
# 定义的日志格式
log4j.appender.R.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n