Java 服务端架构
Spring、Netty、日志框架与工程化实战
🎨 视觉封面JPPF-log4j远程日志管理
利用JPPF进行并行计算,计算任务运行在远端节点上,那么如何收集运行在远端的任务日志,用于跟踪和分析呢?
JPPF框架对此也有封装,主要的实现思路是,通过自定义实现一个log4j的appender,对外提供JMX服务。客户端(监控端)实现一个监听器,监听远端日志,这样即可把远端日志采集到本地进行统一的管理。这对于我们收集和管理并行计算实时日志是非常有用的。具体看一下:
在没个执行任务的Node节点,修改log4j的配置,启用jppf提供的JmxAppender:
log4j-node.properties
log4j.appender.JMX=org.jppf.logging.log4j.JmxAppender
log4j.appender.JMX.layout=org.apache.log4j.PatternLayout
log4j.appender.JMX.layout.ConversionPattern=%d [%-5p][%c.%M(%L)]: %m\n
### set log levels - for more verbose logging change 'info' to 'debug' ###
#log4j.rootLogger=DEBUG, JPPF
log4j.rootLogger=INFO, JPPF, JMX
客户端代码如下:
/**
* @author lihzh
* @alia OneCoder
* @blog http://www.coderli.com
* @date 2013年7月17日 上午10:34:44
*/
public class RemoteLog {
public static void main(String args[]) throws Exception {
// get a JMX connection to the node MBean server
JMXNodeConnectionWrapper jmxNode = new JMXNodeConnectionWrapper("localhost" ,
12001);
jmxNode.connectAndWait(500000L);
// get a proxy to the MBean
JmxLogger nodeProxy = jmxNode.getProxy(JmxLogger.DEFAULT_MBEAN_NAME ,
JmxLogger. class);
// use a handback object so we know where the log messages come from
String source = "node " + jmxNode.getHost() + ":" + jmxNode.getPort();
// subbscribe to all notifications from the MBean
NotificationListener listener = new MyLoggingHandler();
nodeProxy.addNotificationListener(listener, null, source);
String source167 = "node " + jmxNode167.getHost() + ":" + jmxNode167.getPort();
}
}
public class MyLoggingHandler implements NotificationListener {
// handle the logging notifications
public void handleNotification(Notification notification,
Object handback) {
String message = notification.getMessage();
String toDisplay = handback.toString() + ": " + message;
System. out.println(toDisplay);
}
}
简单介绍下,就是通过ip和端口与需要监听的node节点建立jmx链接,然后讲自己事先的监听处理类MyLoggingHandler实例,注册到nodeProxy上。这样如果node端有日志出现,就会通知到监听端,可以进行自己的分类处理。试验一下,启动JPPF环境和启动监听,运行之前介绍的JPPF任务,可以看到在本地成功打印出任务日志信息,这样,并行计算任务分节点的日志收集处理也就很容易实现了。
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
并行计算框架JPPF3.3.4试用
<p 先说一个挺有意思的事情,就在OneCoder准备记录试用过程的时候,给大家截图下载页面的时候,发现最新版本变成3.3.4了。于是,我也只好重新下载了:)</p <p 关于JPPF的介绍,可访问其官网:<a href="http://www.jppf.org"http://www.jppf.org</a<br /...
JPPF并行计算框架类加载机制研究
<p 不算什么深入的研究,主要是了解下JPPF中类的加载和隔离机制。</p <p JPPF中类的加载采用的是分布式类加载技术。这样既可在Node节点运行在node上并不存在的类。也就是类可以仅在用户的Client端存在。</p <p style="text-align: center;" <img alt="" src...
Java 利用ASM读取变量值(Field value)问题研究
最近在学习Spring源码的过程中,遇到了spring-asm工程的重新打包的问题,于是突然就想研究一下asm这个开源字节码操作工具。秉承我的一贯风格,想到啥就立马学啥。 对于开源产品,我的一贯风格就是通过其官方提供的源码版本管理地址(svn/git等),直接下载最新代码,构建Java工程,直接通过工程依赖的方式研究学...
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com