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

网站备案号规则怎么做关于梦想的网站免费的

网站备案号规则,怎么做关于梦想的网站免费的,建设网站后需要什么知识,asp.net的网站开发一、前言 公司中的项目虽然已经用了很多的新技术了#xff0c;但是日志的底层框架还是log4j#xff0c;个人还是不喜欢用这个的。最近项目再生产环境上由于log4j引起了一场血案#xff0c;于是决定升级到log4j2。 二、现象 虽然生产环境有多个结点分散高并发带来的压力… 一、前言   公司中的项目虽然已经用了很多的新技术了但是日志的底层框架还是log4j个人还是不喜欢用这个的。最近项目再生产环境上由于log4j引起了一场血案于是决定升级到log4j2。 二、现象   虽然生产环境有多个结点分散高并发带来的压力但是消息中心上一周好多接入方接入导致并发量一下就增多了导致服务卡死。在堆栈信息中看到大量的BLOCK异常如下。 http-nio-172.17.20.113-28080-exec-6452 #381905 daemon prio5 os_prio0 tid0x00007f49e857e000 nid0x8427f waiting for monitor entry [0x00007f49c1c75000]java.lang.Thread.State: BLOCKED (on object monitor)at org.apache.log4j.Category.callAppenders(Category.java:204)- waiting to lock 0x00000000e5915bd8 (a org.apache.log4j.spi.RootLogger)at org.apache.log4j.Category.forcedLog(Category.java:391)at org.apache.log4j.Category.log(Category.java:856)at org.slf4j.impl.Log4jLoggerAdapter.log(Log4jLoggerAdapter.java:581)at com.cmos.core.logger.DefaultLogger.log(DefaultLogger.java:385)at com.cmos.core.logger.DefaultLogger.log(DefaultLogger.java:398)at com.cmos.core.logger.DefaultLogger.doLog(DefaultLogger.java:350)at com.cmos.core.logger.DefaultLogger.info(DefaultLogger.java:200)at com.cmos.core.logger.DefaultLogger.info(DefaultLogger.java:195) http-nio-172.17.20.113-28080-exec-6452 #381905 daemon prio5 os_prio0 tid0x00007f49e857e000 nid0x8427f waiting for monitor entry [0x00007f49c1c75000]java.lang.Thread.State: BLOCKED (on object monitor)at org.apache.log4j.Category.callAppenders(Category.java:204)- waiting to lock 0x00000000e5915bd8 (a org.apache.log4j.spi.RootLogger)at org.apache.log4j.Category.forcedLog(Category.java:391)at org.apache.log4j.Category.log(Category.java:856)at org.slf4j.impl.Log4jLoggerAdapter.log(Log4jLoggerAdapter.java:581)at com.cmos.core.logger.DefaultLogger.log(DefaultLogger.java:385)at com.cmos.core.logger.DefaultLogger.log(DefaultLogger.java:398)at com.cmos.core.logger.DefaultLogger.doLog(DefaultLogger.java:350)at com.cmos.core.logger.DefaultLogger.info(DefaultLogger.java:200)at com.cmos.core.logger.DefaultLogger.info(DefaultLogger.java:195) 三、log4j高并发线程block原因   log4j-1.2.16 Category forcedLog逻辑如下         log4j版本1.x中使用的是synchronized(this)进行同步操作所有线程共用一个Category而它通过log4j.properties指定。 同一个Category下的线程打log时需要进行全局同步因此它的效率会很低log4j 1.x版不适合高并发的场景。   为了杜绝这种现象的发生最好升级到log4j2或者更换为logback。 四、log4j2和logback选择   到底是升级到log4j2呢还是将底层日志框架更换为logback呢   检查了一下项目直接使用log4j Logger的情况发现部分工具类中使用了这倒没有问题可以统一改一下没有想到是系统部封装的框架中居然也直接使用了log4j 的Logger心里顿时说了一声“草尼玛啊...”。        既然是这样的话肯定不能使用logback了也不能直接升级成log4j2了。 五、log4j1 如何平滑升级到log4j2   The Log4j 1.2 Bridge allows applications coded to use Log4j 1.2 API to use Log4j 2 instead.   1.依赖如下 dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-1.2-api/artifactIdversion2.6.2/version /dependency   我们看一下 log4j-1.2-api-2.6.2 Category forcedLog逻辑如下并没有调用callAppenders方法。      Log4j2 包含了基于 LMAX Disruptor高性能线程间消息通信库的下一代 Asynchronous Loggers。在多线程环境下Asynchronous Loggers 的吞吐量是 Log4j1 和 Logback 的 18 倍而延迟时间也要低一个数量级。   相信大家已经明白了log4j-1.2-api-2.6.2桥接的原理就是复写了log4j-1.2.16相关的类再输出日志的时候调用的是log4j2中的方法。   2.删除掉 log4j的依赖   3.将log4j.properties 替换成 log4j2.xml   log4j.properties内容如下 log4j.rootLoggerINFO,ConsoleAppender,FileAppenderlog4j.appender.ConsoleAppenderorg.apache.log4j.ConsoleAppender log4j.appender.ConsoleAppender.layoutorg.apache.log4j.PatternLayoutlog4j.appender.ConsoleAppender.layout.ConversionPattern%d %p [%t] %C.%M(%L) | %m%nlog4j.appender.FileAppenderorg.apache.log4j.DailyRollingFileAppenderlog4j.appender.FileAppender.File${user.dir}/logs/logging.file-weblog4j.appender.FileAppender.DatePattern .yyyy-MM-ddlog4j.appender.FileAppender.layoutorg.apache.log4j.PatternLayout#log4j.appender.FileAppender.layout.ConversionPattern%-5p %d [%t] %l - %m%n log4j.appender.FileAppender.layout.ConversionPattern%d %p [%t] %C.%M(%L) | %m%nlog4j.logger.com.ibatisdebug log4j.logger.com.ibatis.common.jdbc.SimpleDataSourcedebug log4j.logger.com.ibatis.common.jdbc.ScriptRunnerdebug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegatedebug log4j.logger.java.sql.Connectiondebug log4j.logger.java.sql.Statementdebug log4j.logger.java.sql.PreparedStatementdebug,ConsoleAppender   对应的log4j2.xml内容如下 ?xml version1.0 encodingUTF-8? configurationPropertiesProperty nameLOG_HOME${sys:user.dir}/logs/PropertyProperty nameLOG_FILElogging.file-web/Property/PropertiesAppendersConsole nameconsole_appender targetSYSTEM_OUTPatternLayout pattern%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %C.%M(%L) | %m%n//ConsoleRollingFile namefile_appender immediateFlushtrue fileName${LOG_HOME}/${LOG_FILE}filePattern${LOG_HOME}/${LOG_FILE}.%d{yyyy-MM-dd}PatternLayoutpattern%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %C.%M(%L) | %m%n/pattern/PatternLayoutPoliciesTimeBasedTriggeringPolicy modulatetrue interval1//PoliciesDefaultRolloverStrategy max30//RollingFile /AppendersLoggerslogger namecom.ibatis.common.jdbc.SimpleDataSource leveldebug/logger namejava.sql.Connection leveldebug/logger namecom.ibatis leveldebug/logger namecom.ibatis.common.jdbc.ScriptRunner leveldebug/logger namecom.ibatis.sqlmap.engine.impl.SqlMapClientDelegate leveldebug/logger namejava.sql.Statement leveldebug/logger namejava.sql.PreparedStatement leveldebugappender-ref refconsole_appender//loggerRoot levelINFOappender-ref refconsole_appender/appender-ref reffile_appender//Root/Loggers/configuration   如果在springboot项目中配置了 logging.config 属性请修改 logging.configclasspath:log4j.properties 为 logging.configclasspath:log4j2.xml 六、springboot 对log4j2的支持   springboot 日志系统结构如下。      LoggingSystem是个抽象类功能如下。 beforeInitialize方法日志系统初始化之前需要处理的事情。抽象方法不同的日志架构进行不同的处理initialize方法初始化日志系统。默认不进行任何处理需子类进行初始化工作cleanUp方法日志系统的清除工作。默认不进行任何处理需子类进行清除工作getShutdownHandler方法返回一个Runnable用于当jvm退出的时候处理日志系统关闭后需要进行的操作默认返回null也就是什么都不做setLogLevel方法抽象方法用于设置对应logger的级别  可支持的日志系统配置如下。    AbstractLoggingSystem继承了LoggingSystem复写了initialize方法如下。 Override public void initialize(LoggingInitializationContext initializationContext,String configLocation, LogFile logFile) {if (StringUtils.hasLength(configLocation)) {initializeWithSpecificConfig(initializationContext, configLocation, logFile);return;}initializeWithConventions(initializationContext, logFile); }   initializeWithSpecificConfig方法时在你指定日志配置文件时也就是指定了  logging.config 属性调用。initializeWithConventions方法则是使用默认的配置。   我们简单的看一下Log4J2LoggingSystem初始化过程。   1.默认查找的配置文件名称       2.log4j2具体的初始化配置过程      可以发现log4j2通过LogManager管理着多个LoggerContext每个LoggerContext管理着不同的logger。   3.动态设置logger的level      4.没找到日志配置文件的话使用loadDefaults方法加载      5.springboot具体是采用哪一个LoggingSystem是在LoggingApplicationListener中决定的LoggingApplicationListener是一个ApplicationListenerspringboot工程在启动的时候会被加载。 以下摘自网络LoggingApplicationListener所做的事情...1. 读取配置文件中logging.开头的配置比如logging.pattern.level, logging.pattern.console等设置到系统属性中 2. 构造一个LogFile(LogFile是对日志对外输出文件的封装)使用LogFile的静态方法get构造会使用配置文件中logging.file和logging.path配置构造 3. 判断配置中是否配置了debug并为true如果是设置level的DEBUG然后继续查看是否配置了trace并为true如果是设置level的TRACE 4. 构造LoggingInitializationContext查看是否配置了logging.config如有配置调用LoggingSystem的initialize方法并带上该参数否则调用initialize方法并且configLocation为null 5. 设置一些比如org.springframework.boot、org.springframework、org.apache.tomcat、org.apache.catalina、org.eclipse.jetty、org.hibernate.tool.hbm2ddl、org.hibernate.SQL这些包的log el跟第3步的level一样 6. 查看是否配置了logging.register-shutdown-hook如配置并设置为true使用addShutdownHook的addShutdownHook方法加入LoggingSystem的getShutdownHandler 七、spring默认日志系统   顺便说一下Spring的日志默认采用commons-logging。以下摘自网上   log4j如何切换到logback    1.将logback-classic和logback-core的jar包引入到工程将有关log4j的jar包从工程的classpath中移除。2.确认工程引入了slf4j的jar包作为日志的适配。3.在工程中新建logback.xml文件将原来log4j配置文件log4j.properties转换为logback的对应配置然后将log4j.properties删除。4.将工程中由于缺失了log4j.jar引起的错误进行修正改为利用logback实现。可能遇到的问题及解决方案1.Log4j转换到logback后运行后spring的日志都以红字输出到控制台而不受logback控制。因为Spring的日志默认采用commons-logging解决方法是在工程中引入jcl-over-slf4j-1.6.1.jar这样就将commons-logging与slf4j对接再通过logback进行了日志的统一输出。2.切换完成后启动工程时会出现java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory这个错误。原因是slf4j-api的jar包版本太低改为slf4j-api-1.6.4.jar即可解决。   转载于:https://www.cnblogs.com/hujunzheng/p/9937097.html
http://www.sadfv.cn/news/72051/

相关文章:

  • 包头微网站开发seo排名优化公司价格
  • 国外做健康的网站什么是主页
  • 布吉网站建设哪家便宜竞价网站做招商加盟可以不备案吗
  • 养生网站设计一个专门做试题的网站
  • 南阳网站制作公司东莞网站建设 手机壳
  • 简单网站建设优化.net网站开发实训体会
  • 网站建设需求确认书徐州网站制作费用
  • 网站平台开发报价表怎么做国外做外贸哪个网站好些
  • 淄博亿泰网站建设推广app开发公司有哪些
  • 上海闵行建网站公司海尔网站建设不足之处
  • 电子商务网站建设的展望Wordpress图床对接阿里云
  • 北京齐力众信网站建设做自媒体的网站名字
  • 网站建站平台php网站开发视频教学
  • 用织梦怎么修改网站首页商品顺序怎么让别人访问我建的网站
  • wordpress建电影网站wordpress简约模板下载
  • 微信怎么建小网站邯郸网站优化建设
  • 更换dns能上国外网站吗廊坊视频剪辑培训机构
  • qq群推广网站上海公司购房政策
  • 温州市鹿城区建设小学网站外贸网站源码怎么建
  • 制定网站建设规划书手机餐饮网站开发
  • 在线视频教学网站建设网站维护的具体方法
  • 聊城公司网站设计域名租赁网站
  • aspnet网站开发实例视频哪个网站买域名便宜
  • 站群 网站如何做php做视频分享网站
  • 网站设计 字体免费版权申请入口
  • 宁波做网站seo的网站自己可以备案吗
  • 济南泰安网站建设公司软装设计公司介绍
  • 个人域名能做网站吗初创企业网站建设流程
  • 建筑网站do百度小说搜索风云榜排名
  • 南宁企业网站建站网站建设搭建微商导航网站