FileDocCategorySizeDatePackage
NTEventLogAppender.javaAPI DocApache log4j 1.2.154235Sat Aug 25 00:09:40 BST 2007org.apache.log4j.nt

NTEventLogAppender

public class NTEventLogAppender extends AppenderSkeleton
Append to the NT event log system.

WARNING This appender can only be installed and used on a Windows system.

Do not forget to place the file NTEventLogAppender.dll in a directory that is on the PATH of the Windows system. Otherwise, you will get a java.lang.UnsatisfiedLinkError.

author
Chris Taylor
author
Jim Cakalic

Fields Summary
private int
_handle
private String
source
private String
server
Constructors Summary
public NTEventLogAppender()



    
    this(null, null, null);
  
public NTEventLogAppender(String source)

    this(null, source, null);
  
public NTEventLogAppender(String server, String source)

    this(server, source, null);
  
public NTEventLogAppender(Layout layout)

    this(null, null, layout);
  
public NTEventLogAppender(String source, Layout layout)

    this(null, source, layout);
  
public NTEventLogAppender(String server, String source, Layout layout)

    if (source == null) {
      source = "Log4j";
    }
    if (layout == null) {
      this.layout = new TTCCLayout();
    } else {
      this.layout = layout;
    }

    try {
      _handle = registerEventSource(server, source);
    } catch (Exception e) {
      e.printStackTrace();
      _handle = 0;
    }
  
Methods Summary
public voidactivateOptions()

    if (source != null) {
      try {
   _handle = registerEventSource(server, source);
      } catch (Exception e) {
   LogLog.error("Could not register event source.", e);
   _handle = 0;
      }
    }
  
public voidappend(org.apache.log4j.spi.LoggingEvent event)


    StringBuffer sbuf = new StringBuffer();

    sbuf.append(layout.format(event));
    if(layout.ignoresThrowable()) {
      String[] s = event.getThrowableStrRep();
      if (s != null) {
   int len = s.length;
   for(int i = 0; i < len; i++) {
     sbuf.append(s[i]);
   }
      }
    }
    // Normalize the log message level into the supported categories
    int nt_category = event.getLevel().toInt();

    // Anything above FATAL or below DEBUG is labeled as INFO.
    //if (nt_category > FATAL || nt_category < DEBUG) {
    //  nt_category = INFO;
    //}
    reportEvent(_handle, sbuf.toString(), nt_category);
  
public voidclose()

    // unregister ...
  
private native voidderegisterEventSource(int handle)

public voidfinalize()

    deregisterEventSource(_handle);
    _handle = 0;
  
public java.lang.StringgetSource()

    return source;
  
private native intregisterEventSource(java.lang.String server, java.lang.String source)

private native voidreportEvent(int handle, java.lang.String message, int level)

public booleanrequiresLayout()
The NTEventLogAppender requires a layout. Hence, this method always returns true.

    return true;
  
public voidsetSource(java.lang.String source)
The Source option which names the source of the event. The current value of this constant is Source.

    this.source = source.trim();