当前位置: 首页 > news >正文

SpringBoot初级开发--加入Log4j进行日志管理打印(6)


  日志记录在整个java工程开发中占着很重要的比重,因为很多问题的排查需要通过日志分析才能确认。在SpringBoot中我用得最多的就是log4j这个日志框架。接下来我们具体配置log4j.

  log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL

    logger.fatal("fatal"); // 严重错误,一般会造成系统崩溃和终止运行logger.error("error"); // 错误信息,但不会影响系统运行logger.warn("warn"); // 警告信息,可能会发生问题logger.info("info"); // 程序运行信息,数据库的连接、网络、IO操作等logger.debug("debug"); // 调试信息,一般在开发阶段使用,记录程序的变量、参数等logger.trace("trace"); // 追踪信息,记录程序的所有流程信息

1.添加POM依赖

     <!-- log4j的日志服务 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId><version>1.3.8.RELEASE</version></dependency>

2.增加log4j.properties日志配置文件

在工程的resources文件夹,增加log4j.properties,具体配置文件如下:

### set log levels - for more verbose logging change 'info' to 'debug' ###
#展示log4j的各种配置
log4j.rootLogger=stdout,File
log4j.appender.logfile.encoding=UTF-8#打印到控制台的日志
### Console DEBUG
log4j.logger.stdout=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Append=true  
log4j.appender.stdout.MaxFileSize=20MB  
log4j.appender.stdout.MaxBackupIndex=10  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[ %p ] %c - %m%n#普通文件保存日志
### File
log4j.appender.File.Threshold = ERROR
log4j.appender.File = org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}:%p - %m%n
log4j.appender.File.File=E:/console.log
log4j.appender.File.DatePattern='.'yyyy-MM-dd#自己定义的日志,这里我们是用作记录用户访问的日志
#这里的日志是按天滚动,后缀名是年月日
###Access log
log4j.logger.accessInfo=INFO,R1
log4j.appender.R1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.R1.layout = org.apache.log4j.PatternLayout
log4j.appender.R1.Encoding=UTF-8
log4j.appender.R1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}:%p %t %c - %m%n
log4j.appender.R1.File=E:/access.log
log4j.appender.R1.DatePattern='.'yyyy-MM-dd#自己定义的日志,这里我们是用作记录用户阅读的日志
#这里的日志是按天滚动,后缀名是年月日
#user read record log
log4j.logger.userRead=INFO,R2
log4j.appender.R2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.R2.layout = org.apache.log4j.PatternLayout
log4j.appender.R2.Encoding=UTF-8
log4j.appender.R2.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}:%p %t %c - %m%n
log4j.appender.R2.File=E:/user_read.log
log4j.appender.R2.DatePattern='.'yyyy-MM-dd#INFO
#关闭某些日志的输出
log4j.logger.com.zaxxer.hikari=OFF
log4j.logger.org.apache.http.impl.conn.PoolingHttpClientConnectionManager=OFF
log4j.logger.org.thymeleaf.TemplateEngine.CONFIG=OFF
log4j.logger.org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener=OFF
log4j.logger.io.lettuce=OFF

这里总共输出了4块日志:
一个是stdout的标准控制台输出。

一个是普通文件保存日志基本是所有的日志都会输出在这里,所以它的日志级别定义的非常高,定义成ERROR级别,这样普通的DEBUG,INFO这样的日志都不会输出到这里,只有ERROR级别的才会输出。

一个是accessInfo日志,这是用户自定义的一个日志,用于记录用户的访问日志

一个是userRead日志,这是用户自定义的一个日志,用于记录用户的阅读记录日志

接下里在代码里面,我们增加用户自定义日志的使用技巧,我们定义一个接口常量,这样用户在记录自己特有的日志信息时,就可以直接用常量接口来调用

package com.example.firstweb.util;import org.apache.log4j.Logger;public interface Constants {public static final Logger LOG_ACCESS_INFO = Logger.getLogger("accessInfo");public static final Logger LOG_USER_READ = Logger.getLogger("userRead");}

然后我们在Controller里面使用这些接口常量来记录日志

package com.example.firstweb.controller;import com.example.firstweb.model.po.WelcomePo;
import com.example.firstweb.model.vo.WelcomeVo;
import com.example.firstweb.service.WelcomeService;
import com.example.firstweb.util.Constants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;import org.apache.log4j.Logger;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
@Api(value = "welcome controller", tags = "欢迎界面")
public class Welcome {@Autowiredprivate WelcomeService welcomeService;private static final Logger log = Logger.getLogger(Welcome.class);@GetMapping("/welcomeindex")@ApiOperation("欢迎首页的方法1")public ModelAndView welcomeIndex(){ModelAndView view = new ModelAndView("welcomeindex");WelcomePo wpo= welcomeService.getWelcomInfo();WelcomeVo wvo= new WelcomeVo();BeanUtils.copyProperties(wpo, wvo);view.addObject("welcomedata", wvo);//默认控制台输出日志log.info("default log info ");//输出访问日志Constants.LOG_ACCESS_INFO.info("welcome index accesss");//输出用户阅读日志Constants.LOG_USER_READ.info("first user access log ");return view;}@GetMapping("/welcomeindex2")@ApiOperation("欢迎首页的方法2")public void welcomeIndex2(@ApiParam("定制欢迎词") String test){}
}

然后启动程序,用浏览器访问http://localhost:8088/welcomeindex,然后我们在本地磁盘就可以看到三个日志文件,分别是access.log,console.log,user_read.log在这里插入图片描述
源代码可以在这里直接获得链接: https://pan.baidu.com/s/161WLSttV-nz5Fbmpf6_VVw 提取码: rgrf

http://www.lryc.cn/news/144721.html

相关文章:

  • 计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类
  • android logcat问题 怎么换成旧版
  • 监听的用法watch
  • XML—标记语言
  • 图数据库Neo4j学习五渲染图数据库neo4jd3
  • AI增强的社交网络·导师·电话客服……
  • c# Task异步使用
  • QuickLook概述和使用以及常用插件
  • 1A快恢复整流二极管型号汇总
  • 【element-ui】el-dialog改变宽度
  • 第三讲,实践编程 Eigen
  • POI实现百万数据导出
  • 如何制作党建专题汇报片
  • 沉浸式VR虚拟实景样板间降低了看房购房的难度
  • 如何在Linux环境下给Web应用配置HTTPS证书
  • 面试题-React(七):React组件通信
  • MASM32编程调用 API函数RtlIpv6AddressToString,Windows 10 容易,Windows 7 折腾
  • 为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)
  • Python作业一
  • protobuf概览
  • <C++> SSE指令集
  • cortex-A7核LED灯实验--STM32MP157
  • WPF实战项目十三(API篇):备忘录功能api接口、优化待办事项api接口
  • clickhouse(十四、分布式DDL阻塞及同步阻塞问题)
  • 怎么入门网络安全(黑客)?
  • c++ boost::json
  • 《Flink学习笔记》——第九章 多流转换
  • openmmlab出现KeyError: ‘xxx is not in the model registry....‘
  • 错误代码0x80131500要怎么解决?快速修复方法
  • PMO(Project Management Office)