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

草拟一份网络推广方案南宁seo优化

草拟一份网络推广方案,南宁seo优化,网站域名注册后怎么建设,如何安装网站模板目标:将debug,info级别的日志输出到本地文件,将warn,error级别的日志输出到ActiveMQ。说明:本文还是使用之前的两个项目:Product和Logging。经过一番搜索后,发现log4j还可以按照级别过滤日志&am…

目标:将debug,info级别的日志输出到本地文件,将warn,error级别的日志输出到ActiveMQ。

说明:本文还是使用之前的两个项目:Product和Logging。

经过一番搜索后,发现log4j还可以按照级别过滤日志,但过滤只能使用log4j.xml配置:

Filters can be defined at appender level. For example, to filter only certain levels, the LevelRangeFilter can be used like this:

在搜索资料的过程中,也看到了有网友说log4j.properties方式也可以实现按级别过滤日志,具体步骤请参看《Log4j按级别输出日志到不同文件配置分析》。此种方式的缺点是,如果有多个Appender,则需要多个继承的类(每个Appender需要重新定义一个),因此感觉不如log4j.xml方式通过为appender配置filter来的直接。

value="org.apache.activemq.jndi.ActiveMQInitialContextFactory" />

而Product项目的测试代码相当简单:

package com.demo.product;

import org.apache.log4j.Logger;

public class Main{

public static void main(String[] args) throws Exception {

Logger logger = Logger.getLogger(Main.class);

logger.debug("Debug");

logger.info("Info");

logger.warn("Warn");

logger.error("Error");

logger.fatal("Fatal");

System.exit(0);

}

}

我以为就这样配置就能让WARN和ERROR级别的日志输出到jms了,但是我运行的时候却报错了:

javax.jms.JMSException: Wire format negotiation timeout: peer did not send his wire format.

at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)

at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1395)

at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1481)

at org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:323)

at org.apache.activemq.ActiveMQConnection.createTopicSession(ActiveMQConnection.java:1112)

搜索这个问题,有很多人遇到了,这里列出了三种可能的原因:

1. You're connecting to the port not used by ActiveMQ TCP transport

Make sure to check that you're connecting to the appropriate host:port

2. You're using log4j JMS appender and doesn't filter out ActiveMQ log messages

Be sure to read How do I use log4j JMS appender with ActiveMQ and more importantly to never send ActiveMQ log messages to JMS appender

3. Your broker is probably under heavy load (or network connection is unreliable), so connection setup cannot be completed in a reasonable time

If you experience sporadic exceptions like this, the best solution is to use failover transport, so that your clients can try connecting again if the first attempt fails. If you're getting these kind of exceptions more frequently you can also try extending wire format negotiation period (default 10 sec). You can do that by using wireFormat.maxInactivityDurationInitalDelay property on the connection URL in your client. For example:

tcp://localhost:61616?wireFormat.maxInactivityDurationInitalDelay=30000

第一种情况显然不是。

第三种情况,由于我就一个jms connection,也没有往这个连接发送jms消息,所以不可能负载过重。

第二种情况是不要把activemq的日志发送到JMSAppender了,How do I use log4j JMS appender with ActiveMQ  一文中有以下配置:

## Be sure that ActiveMQ messages are not logged to 'jms' appender

log4j.logger.org.apache.activemq=INFO, stdout

上面的意思是,对于org.apache.activemq包下的INFO级别以上的日志,都输出到stdout appender中。我对比了一下,从拷贝而来的log4j.xml中也包含了类似的配置:

但是为何结果还是这样?几经思考,我重新查看了一下报错的日志:

5d4bf2707ed7626fd84c1b4b710d6085.png

后面的内容是这样的:

org.apache.activemq.transport.WireFormatNegotiator.negociate-118 | Received WireFormat ...

于是我去找到这个类,在这个negociate方法上打上断点(Maven项目的好处还包括可以自动下载jar包对应版本的源代码),开始调试,然后发现是这一句报错:

c4f570d51a989ff98557ec2438dfe92c.png

然后我想了想能不能不打印这个debug消息呢,于是我在开始的org.apache.activemq包中加上了level限制:

这样以后,问题解决。其实,只要我稍微细心一点,可以发现

log4j.logger.org.apache.activemq=INFO, stdout

这个配置不仅指明了org.apache.activemq包下的日志信息输出到stdout这个appender中,而且还指明了只有INFO以上的级别才能输出。二者同时指定才能达到目的,这在刚刚的xml文件中也得到体现。

现在,WARN和ERROR级别的日志就可以输出到ActiveMQ了:

6d3bd19928f97119e06405500f759d41.png

在Logging项目中,和之前一样,LogMessageListener也只是简单打印了级别和内容:

public void onMessage(Message message) {

LoggingEvent event;

try {

event = (LoggingEvent)((ActiveMQObjectMessage)message).getObject();

System.out.println("[" + event.getLevel() + "] | " + event.getMessage());

} catch (JMSException e) {

e.printStackTrace();

}

}

从结果中能看到输出的日志级别仅仅包括了WARN和ERROR:

1064cde5d823666cf359676e18098df2.png

至于剩下的DEBUG和INFO级别的日志,则直接配置输出到RollingFileAppender即可。日志文件的内容也当然和预期一样了:

ea0a27d9564dfd6010f2364948f73651.png

最后贴出完整的log4j.xml配置内容:

log4j:configuration SYSTEM "log4j.dtd">

value="[Log4j-JMS-Sample] %d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %c.%M-%L | %m%n" />

value="%c %d{ISO8601} [%p] -- %m%n" />

value="org.apache.activemq.jndi.ActiveMQInitialContextFactory" />

当然,如果希望再把info和debug分开,可以多配置一个fileappender,让每个过滤器的LevelMax和LevelMin的值相等并为它们配置不同的文件即可。

参考:

http://www.lbrq.cn/news/2614933.html

相关文章:

  • 网站备案制作ip域名查询地址
  • 做信息网站怎么赚钱百度应用商店app下载安装
  • 做网站公司名字搜索引擎优化叫什么
  • 郑州网站建设seo优化seo整站优化多少钱
  • 网站建设毕业设计引言怎么写海外推广渠道都有哪些
  • 中台网站开发公司页面设计
  • 语言做网站草根seo视频大全网站
  • 做室内效果图的网站热搜榜排名今日
  • 个人域名做邮箱网站郑州网站优化培训
  • 高密做网站哪家好黑帽seo培训
  • 哪一个做网站模版好用的外链吧
  • 做电影网站考什么软件企业网络营销业务
  • b2b网站大全 黄页大全百度关键词快排
  • 电影网站建站关键词排名推广怎么做
  • 全国疫情分布图aso优化吧
  • 用ps如何做网站首页四川seo选哪家
  • 在线网站你们会回来感谢我的上海关键词优化排名哪家好
  • 网站建设方案需要哪些步骤电商网站开发平台有哪些
  • 网站适合用angular做吗企业推广方案
  • 手机做ppt苹果手机下载网站营销策略有哪些有效手段
  • 上海外贸网站制作公司南宁seo服务优化
  • 网站开发流程详细介绍软件定制开发
  • 金顺广州外贸网站建设青岛网站排名提升
  • 日本3040岁精华液排行榜上海网站seo诊断
  • 湖北企业模板建站开发湖南网站推广
  • 建设银行网站源码关键词优化工具互点
  • 类似建设b站网站韩国vs加纳分析比分
  • 武汉移动网站制作洗发水营销推广软文800字
  • 找网站建设公司如何自己开个网站平台
  • 网站建设佰首选金手指六自有品牌如何推广
  • 大模型后训练——Online-RL基础
  • Python Pandas.lreshape函数解析与实战教程
  • sqli-labs靶场less40-less45
  • 不可变集合
  • 永磁同步电机的矢量控制
  • MATLAB实现的机载合成孔径雷达回波生成和处理