FileDocCategorySizeDatePackage
DatagramStringWriter.javaAPI DocApache log4j 1.2.154917Sat Aug 25 00:09:34 BST 2007org.apache.log4j.net

DatagramStringWriter

public class DatagramStringWriter extends Writer
DatagramStringWriter is a wrapper around the java.net.DatagramSocket class so that it behaves like a java.io.Writer.

Fields Summary
static final int
SYSLOG_PORT
private int
port
private String
host
private String
encoding
private String
prefix
private InetAddress
address
private DatagramSocket
ds
Constructors Summary
public DatagramStringWriter(String host)
This constructor assumes that it is sending to a remote syslog daemon on the normal syslog port (514), and uses the default platform character encoding when converting the message string to a byte sequence.


                                       
  
    
    this(host, SYSLOG_PORT, null, null);
  
public DatagramStringWriter(String host, int port)
This constructor sends messages to the specified host and port, and uses the default platform character encoding when converting the message string to a byte sequence.

    this(host, port, null, null);
  
public DatagramStringWriter(String host, int port, String encoding)
This constructor sends messages to the specified host and port, and uses the specified character encoding when converting the message string to a byte sequence.

    this(host, port, null, null);
  
public DatagramStringWriter(String host, int port, String encoding, String prefix)
This constructor sends messages to the specified host and port, and uses the specified character encoding when converting the message string to a byte sequence; the specified prefix (which may be null) is prepended to each message.

    this.host = host;
    this.port = port;
    this.encoding = encoding;
    this.prefix = prefix;

    try {
      this.address = InetAddress.getByName(host);
    }
    catch (UnknownHostException e) {
      LogLog.error("Could not find " + host +
			 ". All logging will FAIL.", e);
    }

    try {
      this.ds = new DatagramSocket();
    }
    catch (SocketException e) {
      e.printStackTrace();
      LogLog.error("Could not instantiate DatagramSocket to " + host +
			 ". All logging will FAIL.", e);
    }
  
Methods Summary
public voidclose()

public voidflush()

public voidsetPrefix(java.lang.String prefix)
Set a string to be prefixed to every message sent by this Writer. For example, this method could be used to prepend a syslog facility/priority code on the front of each message.

Note that this method is not synchronised, so should not be called in a situation where other threads may be logging messages at the same moment.

param
prefix may be a prefix string, or null which indicates no prefix should be added.

    this.prefix = prefix;
  
public voidwrite(char[] buf, int off, int len)

    this.write(new String(buf, off, len));
  
public voidwrite(java.lang.String string)

    if (prefix != null) {
      string = prefix + string;
    }
    
    byte[] rawData;
    if (this.encoding == null)
    {
      // convert to byte sequence using platform's default encoding
      rawData = string.getBytes();
    }
    else
    {
      // convert to specified encoding - which may be sequence of
      // 8-bit chars, or multi-byte encodings like UTF-8 or UTF-16.
      // The receiving end had better be expecting whatever encoding
      // is used here on the sending end!
      rawData = string.getBytes(encoding);
    }

    DatagramPacket packet =
      new DatagramPacket(
                 rawData,
					       rawData.length,
					       address,
                 port);

    if(this.ds != null)
    {
      ds.send(packet);
    }
    else
    {
      LogLog.error(
        "write: failed to create DatagramPacket");
    }