10e.printStackTrace();
11} catch (IOException e) {
12e.printStackTrace();
13} catch (RuntimeException e) {
14e.printStackTrace();
15}
16super.activateOptions();
17 }
18 protected void append(LoggingEvent event) {
19if (sh != null) {
20sh.send(layout.format(event));
21if (layout.ignoresThrowable()) {
22String[] s = event.getThrowableStrRep();
23if (s != null) {
24StringBuffer buf = new StringBuffer();
25for (int i = 0; i < s.length; i++) {
26buf.append(s[i]);
27buf.append("\r\n");
28}
29sh.send(buf.toString());
30}
31}
32}
33 }
在SocketHandler中,创建一个新的线程以指定的端口,如果有Telnet客户端连接过来,则将其加入到connections集合中。这样在send()方法中就可以遍历connections集合,并将日志信息发送到每个连接的Telnet客户端。
1 private Vector writers = new Vector();
2 private Vector connections = new Vector();
3 private ServerSocket serverSocket;
4 private int MAX_CONNECTIONS = 20;
5
6 public synchronized void send(final String message) {
7Iterator ce = connections.iterator();
8for (Iterator e = writers.iterator(); e.hasNext();) {
9ce.next();
10PrintWriter writer = (PrintWriter) e.next();
11writer.print(message);
12if (writer.checkError()) {
13ce.remove();
14e.remove();
15}
16}
17 }
18 public void run() {
19while (!serverSocket.isClosed()) {
20try {
21Socket newClient = serverSocket.accept();
22PrintWriter pw = new PrintWriter(
23newClient.getOutputStream());
24if (connections.size() < MAX_CONNECTIONS) {
25synchronized (this) {
26connections.addElement(newClient);
27writers.addElement(pw);
28pw.print("TelnetAppender v1.0 ("
29+ connections.size()
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-14.html
而不是和那一个
果断刷机了
最好直白警告