log4j2输出Logger到控制台

在log4j1的时候用这种获取  protected Logger logger = LoggerFactory.getLogger(getClass());

log4j2的时候用这种获取    protected Logger logger = LogManager.getLogger(UserController.class);

区别看红色部分。

注意导入的包是这两个   

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

升级到log4j2后,需要用第二张方式。

可以在代码中写上代码试试能否输出日志

logger.trace("=====trace=====");  
        logger.debug("=====debug=====");  
        logger.info("=====info=====");  
        logger.warn("=====warn=====");  
        logger.error("=====error=====");  

下面把log4j2的具体配置步骤都记录一下:

pom.xml  用到的jar包

	<!-- slf4j日志包 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.21</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.21</version>
		</dependency>
		<!--Log4j -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.8.2</version>
		</dependency>
		<!-- log4j-core -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.8.2</version>
		</dependency>
		<!-- log4j-web -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-web</artifactId>
			<version>2.8.2</version>
		</dependency>

web.xml

<!-- log4j2-begin -->
	<context-param>
		<param-name>log4jConfiguration</param-name>
		<param-value>classpath:config/log4j2.xml</param-value>
	</context-param>
	<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>
	<!-- log4j2-end -->

log4j2.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>  
  <Configuration status="OFF" monitorInterval="1800">
    
      <properties>  
      	<!-- log打印到本地的路径 -->
          <property name="LOG_HOME">C:/Users/lenovo/Desktop/logs/</property>
          <property name="ERROR_LOG_FILE_NAME">error</property>
      </properties>  
      <Appenders>  
      	<!-- 控制台打印日志 -->
          <Console name="Console" target="SYSTEM_OUT">  
              <PatternLayout pattern="%d %-5p (%F:%L) - %m%n" />  
          </Console>  
    	<!-- 日志信息输出到文件配置 -->
          <RollingRandomAccessFile name="ErrorLog"  
                                   fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"  
                                   filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">  
              <PatternLayout  
                      pattern="%d %-5p (%F:%L) - %m%n"/>  
              <Policies>  
              	  <!-- TimeBasedTriggeringPolicy指定的size是1,结合起来就是1天生成一个新文件。如果filePattern改成%d{yyyy-MM-dd HH}.gz,此时最小粒度为小时,则每一个小时生成一个文件。 -->
                  <TimeBasedTriggeringPolicy/>  
                  <!--  指定当文件体积大于size指定的值时,触发Rolling -->
                  <SizeBasedTriggeringPolicy size="100 MB"/>  
              </Policies>
              <!-- 指定最多保存的文件个数 -->  
              <DefaultRolloverStrategy max="20"/>  
          </RollingRandomAccessFile>  
          <param name="Encoding" value="UTF-8" />
      </Appenders>  
    
      <Loggers>  
          <!-- 3rdparty Loggers -->  
          <logger name="org.springframework.core" level="info">  
          </logger>  
          <logger name="org.springframework.beans" level="info">  
          </logger>  
          <logger name="org.springframework.context" level="info">  
          </logger>  
          <logger name="org.springframework.web" level="info">  
          </logger>  
          <logger name="org.springframework.test.context.junit4.SpringJUnit4ClassRunner" level="info">  
          </logger>  
          <!-- 下面的logger需要修改为你的项目根路径,如com.sd -->
          <logger name="com.fast.ssm" level="debug" includeLocation="true" additivity="false">
              <appender-ref ref="ErrorLog"/>  
              <appender-ref ref="Console"/>  
          </logger>  
          <root level="info" includeLocation="true">
              <appender-ref ref="ErrorLog"/>
              <appender-ref ref="Console"/>  
          </root>  
      </Loggers>  
  </Configuration>  

spring-mybatis的配置文件(SqlMapConfig.xml)注意:<settings>标签顺序,要在最上面

<configuration>
	<!-- 设置使用log4j2打印查询语句 (防止因Commons Logging存在忽略log4j2)-->
	<settings>
		<setting name="logImpl" value="LOG4J2" />
	</settings>
	<plugins>
		<!-- sql语句打印拦截器 -->
		<plugin interceptor="com.fast.ssm.mybatis.log4j2.SqlCostInterceptor" />
	</plugins>
</configuration>

SqlCostInterceptor   sql语句拦截器

/**
 * Sql执行时间记录拦截器 
 */
@Intercepts({@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}),
 @Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),
 @Signature(type = StatementHandler.class, method = "batch", args = { Statement.class })})
public class SqlCostInterceptor implements Interceptor {
 
 @Override
 public Object intercept(Invocation invocation) throws Throwable {
   
  long startTime = System.currentTimeMillis();
  try {
   return invocation.proceed();
  } finally {
   long endTime = System.currentTimeMillis();
   long sqlCost = endTime - startTime;
   System.out.println("执行耗时 : [" + sqlCost + "ms ] ");
  }
 }
 
 @Override
 public Object plugin(Object target) {
  return Plugin.wrap(target, this);
 }
 
 @Override
 public void setProperties(Properties properties) {
   
 }
  
}
配置文件就这些,注意有的路径需要改一下。

猜你喜欢

转载自blog.csdn.net/mint6/article/details/80860465
今日推荐