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

山东省建设执业注册中心网站泰州房产网

山东省建设执业注册中心网站,泰州房产网,国外很炫酷的网站,郑州网站建设模板制作日志有什么用#xff1f; 1)快速的排查和定位问题#xff0c;直接看报错信息#xff1b; 2)进行记录用户登录的信息记录业务功能日志方便分析用户是正常登录还是暴力破解用户#xff1b; 假设我们在这个登录程序中没有写反暴力破解的机制#xff0c;比如说用户输入密码六次… 日志有什么用 1)快速的排查和定位问题直接看报错信息 2)进行记录用户登录的信息记录业务功能日志方便分析用户是正常登录还是暴力破解用户 假设我们在这个登录程序中没有写反暴力破解的机制比如说用户输入密码六次之后锁定三分钟输入10次之后锁定10分钟假设用户在极短的时间内连续输入多次密码我们就可以进行记录下来可以是不是看一下日志从而分析用户的行为从而给你的系统提供一个更加安全稳定的工作环境了发现用户不正常的行为发现一天一个人登录10W次我们查看登录日志发现登录日志暴增正常情况下登录日志2000条但是有一天发现暴增10000条我们就可以设置黑名单发现是暴力破解 3)记录系统的操作日志帮助恢复数据和定位责任人 误删数据之后之前记录删除日志的信息和时间人工进行恢复日志已经记录了操作之前的数据和操作之后的数据非常重要的流程以及操作频率比较低的记录操作记录下来 某个人不小心把信息删除了想推拖责任就可以通过日志找到操作人 4)记录每一个方法的执行时间 方便后期的优化和分析某一个模块方法的执行时间最后把所有模块执行时间列出来看看那个模块执行时间长可以定位到类和方法从而做出针对性性能优化可以通过AOP拦截我们可以针对每一个方法的执行时间进行排序比如说前五条进行优化 5)还有一个具体的应用:比如说教务系统有两个功能写作业功能和查看论坛功能咱们的写作业功能使用Java代码写的但是咱们的查看论坛功能使用PHP写的所以说当用户进行注册教务系统的时候当我们给作业系统添加一条用户注册同时也会在论坛里面同一时间添加一条相同的用户记录这样的目的就是实现一次注册同时在两个系统注册相当于在程序中使用极低的成本来实现用户数据的同步 5.1)假设现在有一个新的系统注册教务系统先给用户写作业系统添加一条记录但是此时插入查看论坛系统失败了系统就会一直死等空转CPU资源第二步注册一直过不去这是客户端就会看到服务器繁忙用户体验就会非常不好(因为当我们进行注册作业教务系统的时候会注册一条相同的记录给论坛系统) 5.2)这是该怎们进行解决呢我们设置无论论坛是否注册成功都会给用户返回成功如果论坛真的注册失败了设置超时时间超过论坛注册超时时间我们就记录一下日志进行报警等待论坛恢复正常了之后把日志给后台的管理人员让管理员手动把用户注册作业功能成功但是论坛失败的用户手动插入同步到查看论坛系统手动进行数据补偿这样就最低成本的解决了问题 1)SpringBoot中内置了日志框架像是SprinBoot内置了测试框架Jackon; 2)默认情况下输出的日志并不是开发者进行定义和打印的而是由系统打印的我们是不2.1)可以直接使用System.out.println来进行打印的但是系统正常的日志有时间点的发生时间日志级别哪个类里面关键信息都很全 2.2)System是在不同的环境下的行为都是一致的一直进行日志的输出的但是有的情况下我们是要屏蔽日志的输出的但是正常的日志是开发环境尽可能打印多的日志而在生产环境里面尽量打印一些比较关键的日志还知道哪个类的那些代码打印日志更全比如说时间啥的上线屏蔽掉一些没用的日志我们可以通过日志框架设置日志级别来屏蔽一些日志的输出 3)日志是打印在控制台上面的没有被永久保存下来保存的再次重启程序上一个错误日志是没有被保存下来的 fatal是当程序被迫终止后才会打印此日志 Controller public class JavaController { //1.先获取到日志对象 private static Logger logger LoggerFactory.getLogger(JavaController.class);//里面传入的参数表示我们在哪个类中打印日志;RequestMapping(/java100)ResponseBody//表示给浏览器返回一个接口而不是页面public String run(String name){ //2.调用这个方法就可以成功的向控制台打印日志,使用日志框架提供的方法进行打印logger.info(我们已经成功地执行了run方法);return name是我;} }在最后一行上面是打印的日志 2022-10-24 16:51:29.403 INFO 64020 --- [nio-8080-exec-1] com.example.demo.UserController : 我已经成功执行了方法日志打印时间段(精确到毫秒之后)日志级别线程ID线程名称包名内容日志内容(日志输出信息) 日志级别:日志级别越低打印的日志是越多的是为了筛选符合目标的日志信息是为了控制相同的代码在不同的生产环境有不同的行为我们只需要在代码不变的情况下在配置文件里面把代码直接进行修改就好了我们就可以过滤掉一些不符合级别的日志了日志缩小了IO次数小了程序执行效率就变高了 日志级别: 1)日志级别可以筛选出一些重要的信息比如说设置日志级别是error那么就可以看到程序的报错日志了对于普通的调试日志和业务日志就可以忽略了从而帮助开发者节省信息筛选的时间 2)日志级别可以控制在不同的环境下面一个程序是否需要打印日志比如说开发环境我们需要很详细的信息而生产环境下为了保证性能和安全性就可以输出更少的日志而日志的级别就可以实现此需求 1)trace:轻微痕迹他是最轻量的(级别日志) 2)debug:调试日志需要调试的关键信息展示 3)info:普通信息普通的打印信息 4)warn:警告不影响使用但是需要注意的信息 5)error:错误日志级别较高的错误日志信息 6)fatal:致命的日志由于代码异常导致程序退出的执行的事件不支持程序进行打印程序直接崩溃是由系统直接输出的 7)日志的级别就是为了筛选信息和过滤信息的是不能看比他级别底的日志比如说我现在设置日志级别是info那么我所看到的日志的级别的信息只能是infowarnerrorfatal不能看到info以下的级别信息当我进行设置日志级别是warn只能看到error和fatal输出的日志信息自定义输出的日志是非常完善和详细的和系统日志输出的内容是相同的 Controller public class JavaController {private static Logger logger LoggerFactory.getLogger(JavaController.class);RequestMapping(/java100)ResponseBody//表示给浏览器返回一个接口而不是页面public String run(String name){logger.trace(日志级别是trace);logger.debug(日志级别是debug);logger.info(日志级别是info);logger.warn(日志级别是warn);logger.error(日志级别是error);return name是我;} } 最终输出结果:日志级别是info 日志级别是warn 日志级别是error 最后输出结果打印比SpringBoot默认日志级别(info)高的日志: 如果说咱们在生产环境,就可以提高日志的级别了想要看到所有的日志级别就要设置默认级别是trace因为当前默认的日志输出界别是info程序只会输出等于当前级别或者是大于当前级别的信息所以说比info小的级别最终我们是看不到的 我们越往下收到的消息越少比如说设置了warn就只能收到warnerror和fatal级别的日志了  1)门面模式:真正的进行操作之前有一个代理对象所有的类进行操作的时候操作的肯定是代理对象而不是最终的一个类就类似于JDBC不管你底层连接的是MYSQL数据库还是Oracle数据库还别的数据库统统不管最上层就是JDBC就算框架变了我的最上面的写法就是保持不变的保持一致性 2)所以说不管最后最底层的日志实现框架使用的是log4j1/2JUL还是lobback最终的最上层的写法都是固定的获取到的日志对象打印日志的代码是永远不会发生改变的其实最后真正打印日志不是SLF4JSLF4J只是驱动了某一个日志实现进行打印的可能是logback也有可能是log 4j 1/2假设后面的logback出现了巨大的漏洞底层换成log 4j 1/2就可以了用户看到的就是代理操作的对象就是slf4j底层实现的就是底层类(logback等等) 3)门面模式又叫外观模式提供了一个统一的接口提供了一个统一的接口用来访问子系统中的一群接口其主要特征是定义了一个高层接口让子系统更容易使用属于结构性模式 我们的SLF4J只是一个代理而已真正决定日志打印还是日志品质以及漏洞的不是SLF4JSLF4J只是一个中间人而是决定最终使用的JUL还是logback用户只是可以感知到的操作的是SLF4J SLF4J和lombok都是常用的日志框架都被内置到Spring里面 他的一个过滤规则:比yml文件里面的日志默认级别低的日志就会被忽略掉但是正常情况下日志的默认过滤级别是info 设置日志的级别还是在咱们的配置文件里面设置: 1)设置全局的日志级别: 在properties里面进行设置:logging.level.roottrace 在yml里面进行设置: logging:level:root:trace2)在配置文件里面设置日志级别:设置指定目录的日志级别  logging:level:com:example:demo:UserController: info #设置com.example.demo包底下的UserController包下打印的日志界别是info logging.level.com.example.demo.Tltrace #这是定位到包的,不要写root 日志级别设置通常设置到文件夹级别 这样所有的日志输出级别就都可以进行打印了   最终结果是当我们在浏览器上面访问URL的时候UserController会自动打印日志信息况且会把trace以上的日志级别的信息全部进行输出因为我们已经设置了UserController类里面的日志级别是trace了 存储日志和实现日志持久化 以上的SpringBoot的日志都是输出在控制台上面的但是如果说我们想要在生产环境的情况下直接保存下来到磁盘的某一个位置以便后面出现问题以后去追溯问题我们把日志保存下来的这个过程就叫做日志持久化它一共有两种实现方式: 1)在配置文件里面设置日志的保存路径当设置了保存路径之后那么日志就会自动地进行持久化操作日志文件名字就是SpringBoot自动创建文件的名字(path) 2)在配置文件里面设置日志保存的名称日志会自动地进行持久化(name) 1)设置日志的保存路径:  设置日志的保存路径:spring boot会按照自己的格式生成日志文件并到对应的我们所指定的目录下面的结果就是说在D盘下面的loggs目录会生成一个spring.log的文件  错误的使用方式: 此时我们要注意一个问题:在配置文件里面写日志持久化路径的时候:D:\Data\----\D会被SpringBoot认为是一个特殊的字符,而非目录,所以说日志持久化不会成功 那么如何才可以正确保存呢 1)logging.file.path:D:/Data/ 2)logging.file.path:D:\\Data\\  默认情况下springboot会有一个最大的日志大小限制如果日志的文件大于默认的最大日志大小那么SpringBoot会重新启动一个日志文件进行保存我们可以在yml文件里面进行设置:max-size属性默认情况下是20KB自动进行分割 logging.level.com.example.demo.ALtrace//设置demo包底下的AL包里面的类日志级别全部是trace logging.file.pathD:\ 所以说当我们的程序部署到linux服务器上面我们还是可以通过设置配置文件的方式来保存我们的日志 2)进行设置日志的保存文件名称:springboot会按照你进行设置的文件来进行保存日志 logging:file:max-size: 2MBname: D:/loggs/SpringBoot.log#这样就可以修改文件名了 通过application.properties配置文件这么写: 之前已经保存的日志是没有被覆盖掉的而是从文件尾进行追加重启项目之后不是直接进行覆盖的 logging.file.nameD://SpringMVC//SpringBoot.log 要指定文件的全路径文件名 小练习:  将Controller包底下的error级别的以上的日志保存在log1.log下面将Service底下面的warn级别以上的日志保存在log2.log目录下面 1)针对Controller包和Service包设置不同的日志级别 2)针对每一个包设置文件存储路径 Logger gerLoggerFactory.getLogger(类名.class) 这么写是很繁琐的况且我们如果需要在要把每一个类打印日志对象那么这个代码就需要在每一个类里面都要进行添加一遍上述代码这当然也是很麻烦的我们还有一些更为简化的日志输出方式使用lombok来进行更简单的输出日志 更加简单的打印自定义日志而不依靠日志对象:通过注解 1)添加lombock框架支持也是一个准备工作 1.1)创建项目的时候已经把lombok添加进来了 1.2)使用插件完成SpringBoot外部框架的注入下载EditStarters插件这个插件是在SpringBoot中快速添加框架依赖的插件右键点击generate之后弹出界面的版本号是不可以进行修改的我们在search里面直接进行搜索你要添加的依赖进行双击就可以了selected下面是当前项目中存在的所有依赖 2)使用slf4j注解输出日志 我们接下来使用更简单的方式来进行获取日志类并进行打印完整日志lombok注解 添加lombok框架通过slf4j注解来进行获取到日志对象这样默认就会得到一个log对象 logging:file:max-size: 2MBname: D:/loggs/Spring.loglevel:root: info#整个项目的日志级别是info Service Slf4j//引入日志框架 public class UserService {PostConstructpublic void PostConstruct(){log.trace(我是日志);log.error(我是UserService下的日志);} }1)相当于我们加上了SLF4J之后就代替了  private static Logger logger LoggerFactory.getLogger(JavaController.class); 2)注意:使用SLF4J注解之后我们在程序中直接使用log对象就可以进行输出日志况且只有使用log对象才可以进行输出自动提供log对象 3)加上Controller修饰的类里面使用路由地址才可以被浏览器访问到咱们在Controller类里面调用Service层 lombok的原理以及常见注解:不影响程序执行的性能 在项目进行编译之前lombock就可以把注解生成我想要的代码比如说Getter和Setter直接变成Setter方法和Getter方法 1)lombok是在编译时期搞事情的:.java代码lombok编译生成字节码在JVM中进行加载运行咱们不需要手动写Setter和Getter方法的 2)因为lombok会自动地在编译时期将我们的Setter和Getter注解进行引入进一步说就是将注解替换成对应的字节码本质上JVM是来进行识别.class文件也就是target目录 3)查看target中的对应程序生成的.class文件就可以了idea会自动将字节码转化成肉眼可见的JAVA源代码了但是实际上target目录实际上存储的时候并不是以JAVA源代码来进行存储的是以字节码来进行存储的只不过是IDEA怕程序员看不懂才来进行适配的我们查看这个字节码发现编译时期的注解都没有了相应替换的是对应的注解对应的字节码 3)SLF4J生成的变量就是log; Getter  Setter    ToString    EqualsAndHashCode自动添加equals和hashcode方法 NoArgsConstructor自动添加无参构造方法 AllArgsConstructor自动添加全属性构造方法顺序按照属性的定义顺序 NonNull属性不可以为空 Sif4j:添加一个为log的日志
http://www.sczhlp.com/news/164700/

相关文章:

  • 佛山网站推广seo松原网站制作
  • 自适应营销网站wordpress主题zmovie
  • 衡水做网站哪家好网站规划的认识
  • 渭南网站建设公司定制网站建设公司flashfxp怎么上传网站
  • 游戏网站建设表格建设银行网站查询余额
  • 简单网站建设教学视频学敏网站建设
  • 镇海建设交通局网站首页wordpress后台接口数据
  • 需要手机号注册的网站广州外贸公司集中地
  • 正则表达式匹配网站手机网站建设费用价格
  • 咋创建自己的网站wordpress 自动登录
  • 苏州网站设计服务淘宝客是怎么做代理网站的
  • 怎样用云服务器做网站c 与oracle做网站
  • 公司的服务器能建设网站吗微信小程序怎么做
  • 灵犀科技 网站开发佼佼者最新国际新闻头条新闻
  • 阜新本地网站建设平台找装修活上哪个平台
  • 搭建网站需要什么服务器商城网站制作网站
  • 建一个公司网站费用工作组赴河南协助
  • 怎么自己建一个网站吗嘉兴新闻头条最新消息
  • 做社交的招聘网站深互动平台登录
  • 做网站报价公司wordpress微博评论箱
  • 邯郸做网站流程网址短链接在线生成免费
  • 做外贸 用国内空间做网站可以自己做歌曲的网站
  • 使用html做网站的网页构建企业门户网站的方法
  • 河南中原建设公司网站wordpress js版本号
  • 网站做seo需要大量文章网络优化大师app
  • Excel表设置为细框线
  • 公司网站的seo优化做淘宝客的网站怎么备案
  • 山东外贸网站建设正规小程序开发的公司
  • 安丘网站建设aqfeifan建设网站需要什么硬件设施
  • 具有口碑的柳州网站建设价格wordpress最新文章id