您的位置:首页 > 产品设计 > UI/UE

QuickServer开发指南(7)- 使用和定制日志

2008-09-03 17:10 519 查看

QuickServer开发指南(7)- 使用和定制日志

对任何一个项目来说,日志都是一个重要的工具。日志帮助我们去理解我们的项目内部发生了什么,它也会提供审核和调试信息。想要知道更多有关日志的资料可查阅Sun公司的网站
http://java.sun.com/j2se/1.4.0/docs/guide/util/logging/overview.html
QuickServer目前只支持Java Logging API (java.util.logging)。1.4版的Java已加入logging。如果你还在使用旧的版本,你可以安装Lumberjack库提供的可选的实现(http://javalogging.sourceforge.net/)。

让我们给我们的EchoServer做一个日志器。QuickServer默认已可以使用日志器,但是除了ConsoleHandler和设置INFO的
级别之外它什么也没有处理。因而无论何时我们在EchoServer关闭和客户端的连接,我们都会在控制台看见一些相似的信息
Feb 16, 2000 10:11:25 PM ClientHandler sendSystemMsg
INFO: Closing connection : /127.0.0.1
上面的信息指明IP为127.0.0.1的客户端关闭了连接。这条消息的显示使用了ClientHalder类的sendSystemMsg()方法.
让我们看看我们怎样在我们的项目中控制日志。使用java logging必须先在类中导入java.util.logging包。
从上面的日志,我们发现某些客户端关闭了连接或掉线,但是它是怎样显示的,我们并没有写任何有关日志的命令。它会显示是因为QuickServer使用了内部的日志器ClientHandler类的sendSystemMsg()方法。
查看QuickServer文档可以找到sendSystemMsg(),如果没有指定级别,它默认使用INFO。你可以在ClientCommandHandler或Authenticator或任何类中使用sendSystemMsg()来记录一个事件。

1. 简单的日志
现在我们来记录每一个连接EchoServer的客户端IP地址。编辑EchoCommandHandler.java文件。在gotConnected(ClientHandler handler)后添加
handler.sendSystemMsg("New Client : " +
handler.getSocket().getInetAddress().getHostAddress(),
Level.INFO);
还要导入包import java.util.logging.*;
编译并运行,连接到EchoServer,你将看到当客户端连接时控制台会显示你的地址。
让QuickServer将日志记录到文件中(XML格式)。下面是修改的文件:

[align=left]echoserver;[/align]
[align=left]import [/b]import [/b]06 07 [b]08[/align]
[align=left]EchoServer {[/align]
[align=left]main(String s[]) {[/align]
[align=left]String cmd = 13 ;[/align]
[align=left]"echoserver.EchoServerPoolableData"15[/align]
[align=left]new
18 Logger logger = 20 [b];[/align]
[align=left]new [/b]);[/align]
[align=left](!log.canRead())[/align]
[align=left]24 25 ); logger.setLevel(Level.INFO);[/b][/align]
[align=left]27 xmlLog = new FileHandler("log/EchoServer.xml"//set logging level to fine[/align]
[align=left]33 myServer setConsoleLoggingLevel(Level INFO);35[/align]
[align=left]37 myServer.setClientData(data);[/align]
[align=left]myServer.setPort(41 );[/align]
[align=left]//store data needed to be changed by QSAdminServer[/align]
[align=left]};[/align]
[align=left]46[/align]
[align=left]48 );[/align]
[align=left]"EchoAdmin v 1.0"51 myServer.getQSAdminServer().setCommandPlugin([/align]
[align=left]);[/align]
[align=left]55 (AppException e){[/align]
[align=left]"Error in server : "(Exception e){[/align]
[align=left]"Error : "}[/align]
[align=left]62 // EchoCommandHandler.java[/align]
[align=left]echoserver;
[/align]
[align=left]import [/b]import [/b]import [/b]import [/b]import [/b]10 implements 12 13 [b]14 +[/align]
[align=left]16 handler.sendClientMsg(18 );[/align]
[align=left]"| Note: Password = Username |"handler.sendClientMsg(21 );[/align]
[align=left]23 [b]24 [b]25 +[/align]
[align=left]27 public void
throws [/b]handler.sendSystemMsg(31 }[/align]
[align=left]public void [/b]throws [/b]if[/b])) {[/align]
[align=left]"Bye ;-)"handler.closeConnection();[/align]
[align=left];[/align]
[align=left]41 "What's interest?"handler.sendClientMsg(43 ]+[/align]
[align=left]);[/align]
[align=left]else if
)) {[/align]
[align=left]47 );[/align]
[align=left](data.getHelloCount()==49 +data.getUsername());[/align]
[align=left]else [/b]handler.sendClientMsg(52 53 } 55 +command);[/align]
[align=left]57 }[/align]
编译并运行程序,现在尝试连接,你将看到它会同时在控制台和xml文件记录你的IP地址。

让我们使用QSAdminGUI设置日志级别为FINEST,观察日志内容的变化。日志记录增加了。另外一个改变日志级别的方法是修改代码,可以使用
logger.setLevel()或者QuickServer的方法setLoggingLevel()来设置所有句柄的日志级别。

[b]2. 日志的高级应用
当我们设置日志级别为FINEST时,会记录很多信息。一个可能的需要是分离QuickServer和应用的日志。下面的代码允许你这么做。

[align=left]echoserver;[/align]
[align=left]import [/b]import [/b]06 07 [b]08[/align]
[align=left]EchoServer {[/align]
[align=left]main(String s[]) {[/align]
[align=left]String cmd = 13 ;[/align]
[align=left]"echoserver.EchoServerPoolableData"15[/align]
[align=left]new
18 Logger logger = 20 ;[/align]
[align=left]null
File log = "./log/"iflog.mkdir();[/align]
[align=left]{[/align]
[align=left]"org.quickserver.net"27 xmlLog = "log/EchoServer.xml"logger.addHandler(xmlLog);[/align]
[align=left]logger = Logger.getLogger(//get App logger[/align]
[align=left]33 FileHandler(34 SimpleFormatter());[/align]
[align=left]36 37 (IOException e){[/align]
[align=left]"Could not create xmlLog FileHandler : "}[/align]
[align=left]41 43myServer.setClientCommandHandler(cmd);[/align]
[align=left]46 48 );[/align]
[align=left]"Echo Server v 1.0"51 Object[] store = [b]"12.00"myServer.setStoreObjects(store);[/align]
[align=left]//config QSAdminServer[/align]
[align=left]4124myServer.getQSAdminServer().getServer().setName(58 [b]59 myServer.getQSAdminServer().setCommandPlugin([/align]
[align=left]);[/align]
[align=left]63 } [b]65 +e);[/align]

[align=left]catch
System.out.println(68 }[/align]
[align=left]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 网络 职场