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

怎样手机做网站教程wordpress密码解密

怎样手机做网站教程,wordpress密码解密,安阳logo设计公司,html怎么自己做网站前言 最新做项目#xff0c;发现一些历史遗留问题#xff0c;典型的是日志打印的配置问题#xff0c;其实都是些简单问题#xff0c;但是往往简单问题引起严重的事故#xff0c;比如日志打印阻塞工作线程#xff0c;以logback和log4j2为例。logback实际上是springboot的…前言 最新做项目发现一些历史遗留问题典型的是日志打印的配置问题其实都是些简单问题但是往往简单问题引起严重的事故比如日志打印阻塞工作线程以logback和log4j2为例。logback实际上是springboot的官方默认日志实现框架承载SLF4J-API所以基于java开发的云原生项目基本上就是logback打印日志logback异步appender日志的打印架构 可以看到consoleAppender实际上也是异步(非同步)的范畴 准备demo springboot的demo这个可以用Spring官方的脚手架生成 其中启动的console日志就是logback打印的虽然我们没有配置logback的xml。而现实情况是需要配置文件的毕竟需要异步打印日志日志切割保存时间等都需要配置关键还要日志格式。 ?xml version1.0 encodingUTF-8? configuration debugfalse!--定义日志文件的存储地址 可以使用环境变量或者系统变量占位--property nameLOGBACK_HOME value/opt/xxx /!--控制台输出 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoder classch.qos.logback.classic.encoder.PatternLayoutEncoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度,%msg日志消息%n是换行符--pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/pattern/encoder/appender!-- 文件 滚动日志 --appender namefileLog classch.qos.logback.core.rolling.RollingFileAppender!-- 当前日志输出路径、文件名 --file${log.path}/app.log/file!--日志输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder!--历史日志归档策略--rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy!-- 历史日志 归档文件名 --fileNamePattern${log.path}/app.%d{yyyy-MM-dd}.%i.log.gz/fileNamePattern!--单个文件的最大大小--maxFileSize200MB/maxFileSize!--日志文件保留天数--maxHistory10/maxHistory/rollingPolicy/appender!-- 文件 异步日志(async) --appender nameASYNC_LOG classch.qos.logback.classic.AsyncAppender !-- 不丢失日志.默认的256/5,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --discardingThreshold0/discardingThreshold!-- 更改默认的队列的长度,默认值为256 --queueSize1024/queueSizeneverBlocktrue/neverBlock!-- 添加附加的appender,最多只能添加一个 --appender-ref reffileLog //appender!--自定义日志级别 myibatis可以输出SQL--logger namecom.apache.ibatis levelTRACE/logger namejava.sql.Connection levelDEBUG/logger namejava.sql.Statement levelDEBUG/logger namejava.sql.PreparedStatement levelDEBUG/!-- 日志输出级别 --root levelINFOappender-ref refSTDOUT /appender-ref refASYNC_LOG//root /configuration 笔者参考各个网站简单写了一个xml 原理 那么为什么日志打印会阻塞工作线程了不是异步的嘛吗异步是没错但是异步解耦却是依赖队列不同于分布式MQ本地队列在某些配置时是阻塞的所以异步日志实际上是半同步有点像MySQL的复制原理架构设计实际上很多地方非常相似。如果不想丢日志可以提高消费队列日志线程的数量增加CPU资源消耗。 参考logback官方文档Chapter 4: Appenders 这个就是前言的代码分析console也是属于异步范畴。 AsyncAppender配置如下  这里关键有3个配置 queueSize队列的大小默认256discardingThreshold队列数量剩余数达到或者小于就丢弃TRACE DEBUG INFO日志neverBlock从不阻塞队列满就丢日志 最简单的架构图写文件是异步线程但是写queue是同步的 源码分析 ch.qos.logback.classic.AsyncAppender关键还是父类ch.qos.logback.core.AsyncAppenderBase /*** In order to optimize performance this appender deems events of level TRACE,* DEBUG and INFO as discardable. See the* a hrefhttp://logback.qos.ch/manual/appenders.html#AsyncAppenderchapter* on appenders/a in the manual for further information.*** author Ceki Guuml;lcuuml;* since 1.0.4*/ public class AsyncAppender extends AsyncAppenderBaseILoggingEvent {boolean includeCallerData false;/*** Events of level TRACE, DEBUG and INFO are deemed to be discardable.* 定义丢弃日志的级别文档写的就是这里实现的* * param event* return true if the event is of level TRACE, DEBUG or INFO false otherwise.*/protected boolean isDiscardable(ILoggingEvent event) {Level level event.getLevel();return level.toInt() Level.INFO_INT;}protected void preprocess(ILoggingEvent eventObject) {eventObject.prepareForDeferredProcessing();if (includeCallerData)eventObject.getCallerData();} 这个类核心还是按照级别丢日志的定义比如queue能存储的大小少于1/5时那些级别日志丢弃 再看父类启动的时候分析初始值发现queue是 ArrayBlockingQueue 定义了队列discardingThreshold的值注意这个是队列数信号量不是百分比发现一些业务配置20 public static final int DEFAULT_QUEUE_SIZE 256; int queueSize DEFAULT_QUEUE_SIZE; 默认队列数256建议配置大一点根据内存分配情况过大会OOM  在分析日志入队列的过程 分析  ArrayBlockingQueue /*** Inserts the specified element at the tail of this queue if it is* possible to do so immediately without exceeding the queues capacity,* returning {code true} upon success and {code false} if this queue* is full. This method is generally preferable to method {link #add},* which can fail to insert an element only by throwing an exception.** throws NullPointerException if the specified element is null*/public boolean offer(E e) {Objects.requireNonNull(e);final ReentrantLock lock this.lock;lock.lock();try {if (count items.length)return false;else {enqueue(e);return true;}} finally {lock.unlock();}} 队列数满直接丢弃所以不阻塞丢失日志。  log4j2 log4j2实际上根据各方测试说比logback性能强一些但是也会出现同样的问题 官方文档Log4j – Log4j 2 Appenders apache开源的文档管理要好一些写的很详细而且有详细的说明和示例不过设计原理都差不多  总结 实际上这个问题是使用问题非常简单不过越是简单的使用却可能出现致命问题一般公司都会统一脚手架或者统一规范的方式来实现标准的日志配置文件防止错误配置导致业务问题不知道未来Java虚拟线程大规模使用会不会缓解日志打印阻塞工作线程的问题毕竟调度更优不过如果线程池满载虚拟线程也是无能为力。还是需要在丢日志和存储消费日志的能力作取舍。
http://www.zqtcl.cn/news/821220/

相关文章:

  • 如何将html发布到网站微帮网免费发布信息网
  • 做个网站西安专业网络推广公司
  • 建设网站cms网站开发后台需要自己写吗
  • 天津协会网站建设学计算机的做网站的叫什么工作
  • 商城网站建设缺点淘宝店铺怎么免费推广
  • 利于优化的网站模板360建筑网密码忘了
  • 商务网站建设找哪家网页设计商品页面制作
  • 连云港网站建设方案大型门户网站多少钱
  • win7 iis设置网站首页网站建设攵金手指科杰壹陆
  • 阿里巴巴网站建设的功能定位手机在线制作图片加字
  • 网站联系我们的地图怎么做的电子商务网站建设完整案例教程
  • 北京学习网站建设湖北省建设厅政务公开网站
  • 推广做网站联系方式贵州省领导班子名单一览表
  • 厦门的网站建设公司徐州城乡建设局网站
  • 天津圣辉友联网站建设南昌本地生活网站有哪些
  • 境外社交网站上做推广上海网站建设的价格低
  • 山西专业网站建设大全高校网站群建设研究
  • 网络营销网站建设流程网站功能设计指什么
  • 企业网络推广网站琼海市建设局网站
  • 移动网站搭建网页设计页面设计
  • 建设网站进行商品营销的重要性恢复正常百度
  • 美容会所网站模板下载jsp网站开发实现增删改查
  • 注册网站需要注意什么深圳建站公司兴田德润官网多少
  • 广东网站优化布吉做棋牌网站建设有哪些公司
  • 联邦快递的网站建设图书馆建设网站注意点
  • 西安好的皮肤管理做团购网站wordpress stats
  • 文山 网站建设 滇icp卡盟网站顶图怎么做
  • 北京网站建设公司哪些好电商建站
  • 沈阳百度广告广州营销seo
  • 营销型企业网站建设步骤做网站怎样和客户沟通