1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.varia;
19
20 import org.apache.log4j.Logger;
21 import org.apache.log4j.BasicConfigurator;
22
23 import java.io.IOException;
24 import java.io.DataInputStream;
25 import java.io.DataOutputStream;
26 import java.net.Socket;
27
28
29
30
31
32
33
34
35
36
37
38
39 public class Roller {
40
41 static Logger cat = Logger.getLogger(Roller.class);
42
43
44 static String host;
45 static int port;
46
47
48 Roller() {
49 }
50
51
52
53
54
55
56
57 public
58 static
59 void main(String argv[]) {
60
61 BasicConfigurator.configure();
62
63 if(argv.length == 2)
64 init(argv[0], argv[1]);
65 else
66 usage("Wrong number of arguments.");
67
68 roll();
69 }
70
71 static
72 void usage(String msg) {
73 System.err.println(msg);
74 System.err.println( "Usage: java " + Roller.class.getName() +
75 "host_name port_number");
76 System.exit(1);
77 }
78
79 static
80 void init(String hostArg, String portArg) {
81 host = hostArg;
82 try {
83 port = Integer.parseInt(portArg);
84 }
85 catch(java.lang.NumberFormatException e) {
86 usage("Second argument "+portArg+" is not a valid integer.");
87 }
88 }
89
90 static
91 void roll() {
92 try {
93 Socket socket = new Socket(host, port);
94 DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
95 DataInputStream dis = new DataInputStream(socket.getInputStream());
96 dos.writeUTF(ExternallyRolledFileAppender.ROLL_OVER);
97 String rc = dis.readUTF();
98 if(ExternallyRolledFileAppender.OK.equals(rc)) {
99 cat.info("Roll over signal acknowledged by remote appender.");
100 } else {
101 cat.warn("Unexpected return code "+rc+" from remote entity.");
102 System.exit(2);
103 }
104 } catch(IOException e) {
105 cat.error("Could not send roll signal on host "+host+" port "+port+" .",
106 e);
107 System.exit(2);
108 }
109 System.exit(0);
110 }
111 }