SpringBoot log打印及输出方式
程序员文章站
2022-07-02 08:58:31
目录springboot log打印及输出导入jar包代码示例日志输出配置springboot切面技术打印log日志mvaen 准备 还有spring家族的创建 weblogacpect 类配置log...
springboot log打印及输出
导入jar包
import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory;
代码示例
private final log log = logfactory.getlog(appcontroller.class); //appcontroller.class为当前class文件,后台会输出这个class文件的log
string input = "%cn%"; this.log.info(input);
后台输出日志如下:
日志输出配置
在application.yml文件中添加配置
logging: path: d:\spring-boot-log //自定义输出日志的地址
springboot切面技术打印log日志
项目的部分功能需要新增加日志的操作记录,想了一圈还是使用切面技术比较方便解决。 相当于代理,感觉比代理更牛逼。
说一下关键词 自己理解的。
-
@aspect
:把当前类搞成一个切面类,提供容器读取 -
@pointcut
:定义切点,扫描那个包下面的那个类,具体到那个方法。 -
@around
:环绕增强,相当于methodinterceptor -
@afterreturning
:后置增强,相当于afterreturningadvice,方法正常退出时执行 -
@before
:标识一个前置增强方法,相当于beforeadvice的功能,相似功能的还有 -
@afterthrowing
:异常抛出增强,相当于throwsadvice -
@after
:final增强,不管是抛出异常或者正常退出都会执行
mvaen 准备 还有spring家族的
<dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>1.7.25</version> </dependency>
创建 weblogacpect 类
@aspect @component public class weblogacpect { private final static logger orderlog = loggerfactory.getlogger("order"); //定义切点 @pointcut("execution(* com.qszhuang.backstage.service.orderservice.updateorder*(..))") public void weblog() { } @before("weblog()") public void dobefore(joinpoint joinpoint) { // 接收到请求,记录请求内容 servletrequestattributes attributes = (servletrequestattributes) requestcontextholder.getrequestattributes(); if (!stringutils.isempty(attributes)) { httpservletrequest request = attributes.getrequest(); // 记录下请求内容 orderlog.info("url : " + request.getrequesturl().tostring()); // orderlog.info("http_method : " + request.getmethod()); orderlog.info("ip : " + httputil.getip(request)); //获取操作人 if (!stringutils.isempty(request.getcookies())) { string cookievaluebyname = httputil.getcookievaluebyname(request.getcookies(), websecurityconfig.token_header); map<string, claim> stringclaimmap = tokenutil.verifytoken(cookievaluebyname); //方法名 // orderlog.info("class_method : " + joinpoint.getsignature().getdeclaringtypename() + "." + joinpoint.getsignature().getname()); orderlog.info("订单号 : {},操作人:{}", arrays.tostring(joinpoint.getargs()), stringclaimmap.get("adminusername").asstring()); } }else { orderlog.info("整点退款"); } } @afterreturning(returning = "ret", pointcut = "weblog()") public void doafterreturning(object ret) throws throwable { // 处理完请求,返回内容 orderlog.info("操作返回值 : " + ret); } }
配置log4j
创建文件 log4j.properties 打印order 日志到指定目录 当然可以配置多个日志分别保存
log4j.rootlogger=info,stdout log4j.appender.stdout = org.apache.log4j.consoleappender log4j.appender.stdout.target = system.out log4j.appender.stdout.layout = org.apache.log4j.patternlayout log4j.appender.stdout.layout.conversionpattern = %d{absolute} %5p %c{1}:%l - %m%n #log4j.appender.timer_log=org.apache.log4j.dailyrollingfileappender #log4j.appender.timer_log.append=true #log4j.appender.timer_log.datepattern='.'yyyy-mm-dd #log4j.appender.timer_log.file=e:/logs/timer/timer.log #log4j.appender.timer_log.threshold=info #log4j.appender.timer_log.layout=org.apache.log4j.patternlayout #log4j.appender.timer_log.layout.conversionpattern=%d - %c [%t] %-5p %c %x %l - %m%n log4j.logger.order=info,order_log log4j.appender.order_log=org.apache.log4j.dailyrollingfileappender log4j.appender.order_log.append=true log4j.appender.order_log.datepattern='.'yyyy-mm-dd log4j.appender.order_log.file=../logs/order/order.log log4j.appender.order_log.threshold=info log4j.appender.order_log.layout=org.apache.log4j.patternlayout log4j.appender.order_log.layout.conversionpattern=[%p] [%d{yyyy-mm-dd hh:mm:ss}] %m%n
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 模块一:持久层框架设计实现及MyBatis源码分析
下一篇: 深入理解Java设计模式之备忘录模式