src/main/java/org/jivesoftware/smack/debugger/ConsoleDebugger.java
private void createDebug() {
        // Create a special Reader that wraps the main Reader and logs data to
        // the GUI.
        ObservableReader debugReader = new ObservableReader(reader);
        readerListener = new ReaderListener() {
            public void read(String str) {
                System.out.println(dateFormatter.format(new Date()) + " RCV  ("
                        + connection.hashCode() + "): " + str);
            }
        };
        debugReader.addReaderListener(readerListener);

        // Create a special Writer that wraps the main Writer and logs data to
        // the GUI.
        ObservableWriter debugWriter = new ObservableWriter(writer);
        writerListener = new WriterListener() {
            public void write(String str) {
                System.out.println(dateFormatter.format(new Date()) + " SENT ("
                        + connection.hashCode() + "): " + str);
            }
        };
        debugWriter.addWriterListener(writerListener);

        // Assign the reader/writer objects to use the debug versions. The
        // packet reader
        // and writer will use the debug versions when they are created.
        reader = debugReader;
        writer = debugWriter;

        // Create a thread that will listen for all incoming packets and write
        // them to
        // the GUI. This is what we call "interpreted" packet data, since it's
        // the packet
        // data as Smack sees it and not as it's coming in as raw XML.
        listener = new PacketListener() {
            public void processPacket(Packet packet) {
                if (printInterpreted) {
                    System.out.println(dateFormatter.format(new Date())
                            + " RCV PKT (" + connection.hashCode() + "): "
                            + packet.toXML());
                }
            }
        };

        connListener = new ConnectionListener() {
            public void connectionClosed() {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection closed (" + connection.hashCode() + ")");
            }

            public void connectionClosedOnError(Exception e) {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection closed due to an exception ("
                        + connection.hashCode() + ")");
                e.printStackTrace();
            }

            public void reconnectionFailed(Exception e) {
                System.out.println(dateFormatter.format(new Date())
                        + " Reconnection failed due to an exception ("
                        + connection.hashCode() + ")");
                e.printStackTrace();
            }

            public void reconnectionSuccessful() {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection reconnected (" + connection.hashCode()
                        + ")");
            }

            public void reconnectingIn(int seconds) {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection (" + connection.hashCode()
                        + ") will reconnect in " + seconds);
            }
        };
    }
private void createDebug() {
        // Create a special Reader that wraps the main Reader and logs data to
        // the GUI.
        ObservableReader debugReader = new ObservableReader(reader);
        readerListener = new ReaderListener() {
            public void read(String str) {
                System.out.println(dateFormatter.format(new Date()) + " RCV  ("
                        + connection.hashCode() + "): " + str);
            }
        };
        debugReader.addReaderListener(readerListener);

        // Create a special Writer that wraps the main Writer and logs data to
        // the GUI.
        ObservableWriter debugWriter = new ObservableWriter(writer);
        writerListener = new WriterListener() {
            public void write(String str) {
                System.out.println(dateFormatter.format(new Date()) + " SENT ("
                        + connection.hashCode() + "): " + str);
            }
        };
        debugWriter.addWriterListener(writerListener);

        // Assign the reader/writer objects to use the debug versions. The
        // packet reader
        // and writer will use the debug versions when they are created.
        reader = debugReader;
        writer = debugWriter;

        // Create a thread that will listen for all incoming packets and write
        // them to
        // the GUI. This is what we call "interpreted" packet data, since it's
        // the packet
        // data as Smack sees it and not as it's coming in as raw XML.
        listener = new PacketListener() {
            public void processPacket(Packet packet) {
                if (printInterpreted) {
                    System.out.println(dateFormatter.format(new Date())
                            + " RCV PKT (" + connection.hashCode() + "): "
                            + packet.toXML());
                }
            }
        };

        connListener = new ConnectionListener() {
            public void connectionClosed() {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection closed (" + connection.hashCode() + ")");
            }

            public void connectionClosedOnError(Exception e) {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection closed due to an exception ("
                        + connection.hashCode() + ")");
                e.printStackTrace();
            }

            public void reconnectionFailed(Exception e) {
                System.out.println(dateFormatter.format(new Date())
                        + " Reconnection failed due to an exception ("
                        + connection.hashCode() + ")");
                e.printStackTrace();
            }

            public void reconnectionSuccessful() {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection reconnected (" + connection.hashCode()
                        + ")");
            }

            public void reconnectingIn(int seconds) {
                System.out.println(dateFormatter.format(new Date())
                        + " Connection (" + connection.hashCode()
                        + ") will reconnect in " + seconds);
            }
        };
    }
Creates the listeners that will print in the console when new activity is
detected.