我通过添加以下注释创建了MDB:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "queue/MyQueue")
})
这个bean还实现了MessageListener接口,并覆盖了它的onMessage()方法,我在该方法中定义了日志消息到达时所需的行为。它看起来是这样的:
public class myBean implements MessageListener {
@Override
public void onMessage(Message msg) {
if(msg instanceof TextMessage){
TextMessage txtMess = (TextMessage)msg;
String context = (String)txtMess.getText();
processLogData(context);
}
}
我还需要将JMS添加到WildFly的standalone.xml中,方法是从standalone-full.xml复制所有与JMS相关的行。我还需要将我的队列添加到standalone.xml中,将这一行添加到:
<jms-queue name="SequenceQueue" entries="java:/jms/queue/MyQueue"/>
我不确定,我该怎么做。我应该把JMSQueueApender类放在哪里?我应该为queueConnectionFactoryBindingName和queueBindingName以及initialContextFactory和ProviderURL提供什么值?
我读取了int this SO线程,因此我应该将log4j.properties
文件放在我的ear/meta-inf
中。我还在这个SO线程中读到了log4j.properties应该是什么样子的。
但是,我不确定需要向JMSQueueApender类提供哪些值,以及应该将它放在哪里(如何初始化它)。
由于我的项目是在应用服务器(Java EE环境)内部运行的,并且我的队列是该容器的一部分,我是否可以编写一个更简单的JMSQueuApender类。类似这样的事情:
@Singleton
@Startup
public class JMSQueueAppender extends AppenderSkeleton {
private Logger log = LoggerFactory.getLogger(LogSomethingBean.class);
@Inject
private JMSContext context;
@Resource(mappedName = "java:/jms/queue/MyQueue")
private Queue queue;
public void append(LoggingEvent event) {
try {
TextMessage msg = queueSession.createTextMessage();
String str = (String)event.getMessage();
msg.setText(str);
context.createProducer().send(queue, msg);
} catch (JMSException e) {
log.error("An error has occured while trying to send a msg to queue", e);
}
}
}
编辑:是否有可能为整个Wildfly实例定义一个log4j.properties文件,以便在其上运行的每个项目都读取该配置?
我找到了一种在Wildfly10.1 Final上使用这个附加器的方法。
我按原样使用了JMSQueueApender类。
我将log4j.properties文件添加到ear/application/meta-inf(我使用的是Maven)。
log4j.rootLogger=INFO, stdout, jms
## Be sure that ActiveMQ messages are not logged to 'jms' appender
log4j.logger.org.apache.activemq=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
## Configure 'jms' appender
log4j.appender.jms=rs.netset.authority.log4j.JMSQueueAppender
log4j.appender.jms.initialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory
log4j.appender.jms.providerUrl=tcp://localhost:61616
log4j.appender.jms.queueBindingName=java:/jms/queue/MyQueue
log4j.appender.jms.queueConnectionFactoryBindingName=ConnectionFactory
我正在将log4j1升级到log4j2。我在log4j1中创建了一个自定义appender,并在append(LoggingEvent事件)方法中使用事件检索错误堆栈跟踪。getThrowableStrRep()并为每行追加'\t'。 我在log4j2中没有看到getThrowableStrRep。你能帮我解决我们如何在log4j2中做到这一点吗?
我想根据不同的模块登录不同的应用程序... 我有3个附件:控制台,一个用于记录控制器和服务的滚动文件,另一个用于记录作业中的某些内容的滚动文件。我只想为其滚动文件记录作业的代码,并只使用另一个滚动文件记录控制器和服务。 这是我的grails log4j配置: 使用此配置,日志将写入两个滚动文件和标准输出。如果从根目录中删除滚动附加器,滚动文件将保持为空,即使为文件组指定了附加器。 有人建议将日志分
我已经将log4j放入了buildpath中,但在运行应用程序时会收到以下消息: 这些警告意味着什么?这里的附加符是什么?
我得到这个错误 这是我的主要任务 这是我的log.properties档案 这是我的文件结构。 我正处于Log4J的学习阶段,并试图实施一个虚拟项目来深入理解它。
我已经把我的log4j放好了。我的webapp的lib文件夹中的properties文件我还尝试在META-INF中输入如下内容: 这是我的log4j.properties.我得到以上警告和记录器是不写任何文件。我也创建了文件夹结构,如上所述。
问题内容: 我已经将log4j放到了我的构建路径中,但是在运行应用程序时收到以下消息: 这些警告是什么意思?这里的追加器是什么? 问题答案: 这个log4j指南的简短介绍有些陈旧,但仍然有效。 该指南将为你提供有关如何使用记录器和附加器的信息。 为了让你步入正轨,你可以采用两种简单的方法。 首先是将这一行添加到你的main方法中: 第二种方法是将这个标准文件log4j.properties(来自上