远程调试(查看web的打印日志,服务等的打印日志)的一个小工具

写了个远程调用的小工具,分享下 。

有时写程序时候,会在代码中加一些打印的语句,将中间结果打印出来,以便查看正确性与否 ,但当这一部分代码上传到服务器的时候,随之的打印结果也在相应的服务机器上,有没有一种方法,将自己中间打印的东西全部打印到一个特定的地方,无论代码在哪里运行 ???   RMI  ,原理很简单:在自己的机器上启动个RMI的服务,然后打印语句时调用这个RMI,将这些语句打印到特定的机器(或文件中,只要你查看方便即可) 。

示例代码如下

RMI服务端:

 

远程调用的接口RemoteInterface
package rmi;


import java.rmi.Remote;
import java.rmi.RemoteException;
/**
*
*
@author cctv
*
*/
public interface RemoteInterface extends Remote{
/**
* 将信息输出到RMI的服务上 。
*
@param outStr 待输出的信息 。
*
@param name 待输出的 标志名称
*
@throws RemoteException
*/
public void newPrint(String outStr ,String name)throws RemoteException;
}

 

远程调用接口的实现RemoteInterfaceImpl
package rmi;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class RemoteInterfaceImpl extends UnicastRemoteObject implements RemoteInterface {
protected RemoteInterfaceImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
/**
*
*/
private static final long serialVersionUID = 1L;
//存储服务启动时,待输出的流
private static Map<String,PrintStream> outMap=new HashMap<String,PrintStream>();
//输出的时间格式
private static SimpleDateFormat simpleDateFormat=new SimpleDateFormat("MM月dd日:HH-mm-ss-SS");
@Override
public void newPrint(String outStr, String name) throws RemoteException {
PrintStream out
=outMap.get(name);
if(out==null){
try {
out
=new PrintStream(new FileOutputStream("out/"+name+".log",true),false,"GBK");
}
catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("创建输出错误!!");
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("创建输出错误!!");
}
outMap.put(name, out);
}
System.out.println(simpleDateFormat.format(
new Date())+":"+outStr);
out.println(simpleDateFormat.format(
new Date())+":"+outStr);
}
}

 

启动服务的代码main方法
package rmi;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

public class RmiServer {

private static final int PORT = 52519;

public static void main(String[] args) {
try {
RemoteInterfaceImpl impl
= new RemoteInterfaceImpl();
LocateRegistry.createRegistry(PORT);
//设置为本机的的ip ,在别的地方调用该服务的时候,ip和端口号必须和这里一致
Naming.rebind("//127.0.0.1:"+PORT+"/OTU_RMI", impl);
System.out.println(
"RMI的测试程序!!!!");
}
catch (RemoteException e) {
e.printStackTrace();
}
catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

 

调用端的:

调用时的工具类
package rmi;

import java.rmi.Naming;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 客服端的一个调用工具
*
@author cctv
*
*/
public class ClientUtil {
static RemoteInterface client=null;
static{
try {
client
= (RemoteInterface) Naming.lookup("//127.0.0.1:52519/OTU_RMI");
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//封装的接口,便于客服端调用
public static void println(String outStr, String name){
try {
client.newPrint(outStr, name);
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*调用的接口,和util写到一个java文件中,便于调用 。
*
@author cctv
*
*/
interface RemoteInterface extends Remote{
/**
* 将信息输出到RMI的服务上 。
*
@param outStr 待输出的信息 。
*
@param name 待输出的 标志名称
*
@throws RemoteException
*/
public void newPrint(String outStr ,String name)throws RemoteException;
}

 

调用举例

ClientUtil.println("hahahahahhahaha", "测试工程");

 

 

并没有太大的技术含量,但使用起来有时挺方便的 。 ~ ~

posted @ 2011-01-27 14:24  xiao晓  阅读(786)  评论(0编辑  收藏  举报