Using log4j to log messages to the TCP/IP stream

Posted On December 20, 2007

Filed under Uncategorized
Tags: , , , ,

Comments Dropped 3 responses

Overview

Using org.apache.log4j.net.SocketAppender to log messages to a socket. The idea is that, incoming messages can be interpreted and possibly displayed graphically. What follows is a quick and dirty approach.

log4j.properties

log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.port=56445
log4j.appender.socket.remoteHost=localhost

log4j.rootCategory=all, socket

SocketLoggerTest.java

package com.filler.l4j;

import org.apache.log4j.Logger;

public class SocketLoggerTest
{
  private static Logger log = Logger.getLogger(SocketLoggerTest.class);

  public static void main(String args[])
  {
    log.trace("tracing you, because you are idiot");
    log.debug("no more debugs");
    log.info("do you want information");
    log.warn("warning up");
    log.error("to err is computer");
    log.fatal("fat al");
  }
}

SocketLoggerListener.java

import java.net.ServerSocket;
import java.net.Socket;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.EOFException;
import java.io.IOException;

import org.apache.log4j.spi.LoggingEvent;

public class SocketLoggerListener
{
  public static void main(String args[]) throws IOException
  {
    final ServerSocket serverSocket = new ServerSocket(56445);
    final Socket socket = serverSocket.accept();
    serverSocket.close();

    final InputStream is = socket.getInputStream();
    final ObjectInputStream ois = new ObjectInputStream(is);

    while(true) {
      final Object o;

      try { o = ois.readObject(); }
      catch(EOFException eofe) { break; }
      catch(ClassNotFoundException cnfe) { continue; }

      if(o instanceof LoggingEvent) {
        final LoggingEvent logEvent = (LoggingEvent) o;
        processEvent(logEvent);
      }
    }

    ois.close();
    socket.close();
  }

  public static void processEvent(LoggingEvent logEvent)
  {
    System.out.print("[" + logEvent.getLevel() + "] ");
    System.out.println(logEvent.getMessage());
  }
}

Running on Linux

javac -classpath log4j.jar:./ SocketLoggerListener.java
java -classpath log4j.jar:./ SocketLoggerListener

This will make the ServerSocket listen to the port. Now, use

javac -classpath log4j.jar:./ -d ./ SocketLoggerTest
java -classpath log4j.jar:./ com.filler.l4j.SocketLoggerTest

Running on Windows

javac -classpath log4j.jar;./ SocketLoggerListener.java
java -classpath log4j.jar;./ SocketLoggerListener

This will make the ServerSocket listen to the port. Now, use

javac -classpath log4j.jar;./ -d ./ SocketLoggerTest
java -classpath log4j.jar;./ com.filler.l4j.SocketLoggerTest

Better use an ant build file to do the job elegantly.

3 Responses to “Using log4j to log messages to the TCP/IP stream”

  1. Mitch Blackshire

    Hello! This is my first comment here so I just wanted to give a quick shout out and say I genuinely enjoy reading through your posts. Can you recommend any other blogs/websites/forums that deal with the same subjects? Thank you so much!

  2. Fizikusvob

    hello to all! =)
    can someone tell me how i can search funny videos with cats on http://yuotube.com/ ?
    im a newbie in computers :(

  3. Arild

    Nice code. I’m beginning to like those small snippets of yours. Thanks a lot. – Arild

Leave a comment