ssm框架怎么利⽤l在控制台输出sql⽇志
我不知道在⼲什么,反正就是弄出来了。
JDK1.8 MAVEN3.5.3 Tomcate7.x
l引⼊相关依赖|
<!--⽇志开始-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.8.2</version>
</dependency>
<!-- blog.csdn/zeal9s/article/details/86078097-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
<!--⽇志结束-->
2.在resources⽂件夹下新建l⽂件
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!--⽇志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后⾯的status,这个⽤于设置log4j2⾃⾝内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <configuration status="info">
<!-- 变量配置应该是⽇志⽂件保存路径-->
<Properties>
<!-- (*必须,各应⽤需要修改)部署应⽤的名称,命名规则 :全部⼩写字母、中短横线、数字,与微服务命名,disconf中命名⼀致 -->
<property name="APPNAME">park-service</property>
<!-- (各应⽤需要修改)⽇志⽂件本地存放⽬录路径建议各个环境跟⽣产环境统⼀起来,⽅便维护 -->
<!--sys:catalina.home tomcat的根⽬录-->
<Property name="logBaseFolder">${sys:catalina.home}/logs/zcrTest/</Property>
<!-- *必须并强制遵守⽇志⽂件的编码 -->
<property name="log_charset">UTF-8</property>
<!--输出⽇志格式-->
<property name="log_pattern">
%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n
</property>
</Properties>
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出⽇志的格式 %l :表⽰某个类-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%t] %-5p %c{1}:%L - %msg%n"/>
</console>
<!-- 这个会打印出所有的info及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${logBaseFolder}/${APPNAME}-info.log"
filePattern="${logBaseFolder}/%d{yyyy-MM}/${APPNAME}-info-%d{dd HH:mm:ss}.%">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- ⽇志输出格式 -->
<PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
<!-- 以下是⽇志压缩包⽬录的建议格式名称建议1天归档依次,压缩⽂件上线建议为200,这⾥预估每个磁盘存储空间200G左右,每个压缩包最⼤值200 MB -->
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileError" fileName="${logBaseFolder}/${APPNAME}-error.log"
filePattern="${logBaseFolder}/%d{yyyy-MM}/${APPNAME}-error-%d{dd HH:mm:ss}.%">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引⼊的appender,appender才会⽣效-->
<loggers>
<!--过滤掉spring和mybatis的⼀些⽆⽤的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="batis" level="INFO"/>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
**l⽂件**
<!--⽇志-->
<!-- log4j2-begin-->
<!--和过滤器-->
<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>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>l</param-value>
</context-param>
<!--动态修改l:容器会每60秒扫描log4j的配置⽂件-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<!-- log4j2-end -->
4.⽇志管理类LogInterceptor
内容如下
package com.hr.interceptor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;
@Component
public class LogInterceptor {
private static final Logger logger = Logger(LogInterceptor.class);
String logStr=null;
//⽤来做环绕通知的⽅法可以第⼀个参数定义为org.aspectj.lang.ProceedingJoinPoint类型
public Object around(ProceedingJoinPoint call) throws Throwable {
Object result = null;
//取得类名和⽅法名
String className = Target().getClass().getName();
String methodName = Signature().getName();
//相当于前置通知
logStr=className+"类的"+methodName+"⽅法开始执⾏******Start******";
logger.info(logStr);
try {
result = call.proceed();
//相当于后置通知
logStr=className+"."+methodName+"()⽅法正常执⾏结束...";
logger.info(logStr);
} catch (Throwable e) {
/
/相当于异常抛出后通知
StackTraceElement stackTraceElement= e.getStackTrace()[e.getStackTrace().length-1];
Object[] Args();
<("----------------------------------------------------------------------------------");
< ( "===执⾏{}类的{}()⽅法的{}⾏",className,LineNumber()); ("===异常信息为:{} ",e.fillInStackTrace().toString());
<("===参数信息为:{} ",args);
throw e;
}finally{
//相当于最终通知
logStr=className+"类的" +methodName+"⽅法执⾏结束******End******";
logger.info(logStr);
}
return result;
}
}
l中配置AOP
内容如下
<!--⽇志-->
<!-- 使⽤xml配置aop ,引⼊AOP的命名空间-->
<bean id="logInterceptor" class="com.hr.interceptor.LogInterceptor"></bean>
<!-- 强制使⽤cglib代理,如果不设置,将默认使⽤jdk的代理,但是jdk的代理是基于接⼝的 -->
<aop:config proxy-target-class="true" />
<aop:config>
<!--定义切⾯-->
<aop:aspect id="logAspect" ref="logInterceptor">
<!--定义切⼊点-->
<aop:pointcut expression="execution(* com.hr.web.*.*(..))" id="logPointCut"/>
<!--⽅法执⾏之前被调⽤执⾏的-->
<!--<aop:before method="before" pointcut-ref="logPointCut"/><!–⼀个切⼊点的引⽤–>--> <!--<aop:after method="after" pointcut-ref="logPointCut"/><!–⼀个切⼊点的引⽤–>-->
<!--<aop:after-throwing method="afterThrowing" pointcut-ref="logPointCut" />-->
<!--<aop:after-returning method="afterReturn" pointcut-ref="logPointCut" />-->
<aop:around method="around" pointcut-ref="logPointCut"/>
</aop:aspect>param name
</aop:config>
private static Logger logger = Logger(Name());
logger.info(“我是logger信息”);
Log4j2⽇志级别
级别
在log4j2中, 共有8个级别,按照从低到⾼为:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
All: 最低等级的,⽤于打开所有⽇志记录.
Trace: 是追踪,就是程序推进⼀下.
Debug: 指出细粒度信息事件对调试应⽤程序是⾮常有帮助的.
Info: 消息在粗粒度级别上突出强调应⽤程序的运⾏过程.
Warn: 输出警告及warn以下级别的⽇志.
Error: 输出错误信息⽇志.
Fatal: 输出每个严重的错误事件将会导致应⽤程序的退出的⽇志.
OFF: 最⾼等级的,⽤于关闭所有⽇志记录.
程序会打印⾼于或等于所设置级别的⽇志,设置的⽇志等级越⾼,打印出来的⽇志就越少。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论