Author: carnold
Date: Wed Jan 25 12:31:51 2006
New Revision: 372308

URL: http://svn.apache.org/viewcvs?rev=372308&view=rev
Log:
Bug 35452: Restore NTEventLogAppender

Removed:
    logging/log4j/trunk/src/java/org/apache/log4j/nt/make.bat
Modified:
    logging/log4j/trunk/build.xml
    logging/log4j/trunk/src/java/org/apache/log4j/nt/NTEventLogAppender.java
    logging/log4j/trunk/tests/build.xml
    
logging/log4j/trunk/tests/src/java/org/apache/log4j/nt/NTEventLogAppenderTest.java

Modified: logging/log4j/trunk/build.xml
URL: 
http://svn.apache.org/viewcvs/logging/log4j/trunk/build.xml?rev=372308&r1=372307&r2=372308&view=diff
==============================================================================
--- logging/log4j/trunk/build.xml (original)
+++ logging/log4j/trunk/build.xml Wed Jan 25 12:31:51 2006
@@ -62,9 +62,10 @@
   <property name="log4j-jms.jar" value="log4j-jms-${version}.jar"/>
   <property name="log4j-smtp.jar" value="log4j-smtp-${version}.jar"/>
   <property name="log4j-db.jar" value="log4j-db-${version}.jar"/>
+  <property name="log4j-nt.jar" value="log4j-nt-${version}.jar"/>
 
 
-  <!-- Destination for documentation files -->
+       <!-- Destination for documentation files -->
   <property name="docs.dest" value="./docs"/>
   <!-- Source directory for xml docs -->
   <property name="xdocs.src" value="./src/xdocs"/>
@@ -254,7 +255,7 @@
   </target>
 
   <target name="build" description="Compile all log4j components."
-             depends="init, build.core, build.oro, build.jms, build.smtp, 
build.db,
+             depends="init, build.core, build.oro, build.jms, build.smtp, 
build.db, build.nt,
                       build.examples"/>
 
   <target name="requiredepsCheck" 
@@ -269,13 +270,13 @@
         <isset property="javamail-present"/>
         <isset property="servletAPI-present"/>                 
         <isset property="jdbcExtension-present"/>              
-        <isset property="jaxp-present"/>               
+        <isset property="jaxp-present"/>
       </and>
     </condition>
     <fail unless="alldeps.exist">
       Some jar files required to perform a full compile of log4j are not 
        available on the classpath.  Update build.properties as needed.
-    </fail>    
+    </fail>
   </target>
 
   <target name="build.core" depends="init, jndiCheck, jaxpCheck">
@@ -293,7 +294,8 @@
                     ${stem}/rule/LikeRule.java,
                      ${stem}/or/jms/*.java,
                      ${stem}/selector/servlet/*.java,
-                     ${stem}/lbel/**/*.java"
+                     ${stem}/lbel/**/*.java,
+                                        ${stem}/nt/**/*.java"
           deprecation="${deprecation}"
           debug="${debug}"
           target="${target}"
@@ -509,8 +511,80 @@
       </manifest>
     </jar>     
   </target>
-  
-  <target name="log4j-optional.jar" depends="init, build.core">
+
+       <target name="build.nt" depends="init">
+               <mkdir dir="${javac.dest}/"/>
+               <javac srcdir="${java.source.dir}"
+                          destdir="${javac.dest}"
+                          deprecation="${deprecation}"
+                          debug="${debug}"
+                          includes="${stem}/nt/**.java"
+                          target="${target}"
+                          source="${source}">
+                       <classpath refid="compile.classpath"/>
+               </javac>
+       </target>
+
+    <target name="log4j-nt.jar" depends="build.nt">
+        <mkdir dir="${jar.dest}/"/>
+        <jar jarfile="${jar.dest}/${log4j-nt.jar}" basedir="${javac.dest}"
+                        includes="${stem}/nt/**/*.class">
+            <manifest>
+                <section name="org/apache/log4j/">
+                    <attribute name="Implementation-Title" value="log4j-nt"/>
+                    <attribute name="Implementation-Version" 
value="${version}"/>
+                    <attribute name="Implementation-Vendor" value="Apache 
Software Foundation"/>
+                </section>
+            </manifest>
+        </jar>
+    </target>
+
+    <target name="build.nt.dll" depends="log4j.jar,log4j-nt.jar" 
description="Build NTEventLogAppender.dll">
+               <javah 
class="org.apache.log4j.nt.NTEventLogAppender,org.apache.log4j.Priority"
+                          destdir="${javac.dest}"
+                          
classpath="${jar.dest}/${log4j.jar};${jar.dest}/${log4j-nt.jar}"/>
+               <exec executable="mc">
+                       <arg value="-h"/>
+                       <arg file="${javac.dest}"/>
+                       <arg value="-r"/>
+                       <arg file="${javac.dest}"/>
+                       <arg 
file="${java.source.dir}org/apache/log4j/nt/EventLogCategories.mc"/>
+               </exec>
+
+               <exec executable="windres">
+                       <arg value="-o"/>
+                       <arg file="${javac.dest}/EventLogCategories.o"/>
+                       <arg value="--include-dir=${javac.dest}"/>
+                       <arg file="${javac.dest}/EventLogCategories.rc"/>
+               </exec>
+
+               <exec executable="windres">
+                       <arg value="-o"/>
+                       <arg file="${javac.dest}/NTEventLogAppender.o"/>
+                       <arg 
file="${java.source.dir}org/apache/log4j/nt/NTEventLogAppender.rc"/>
+               </exec>
+
+               <property name="jni.include.dir" 
location="${java.home}\..\include"/>
+               <exec executable="gcc">
+                       <arg value="-Wall"/>
+                       <arg value="-D_JNI_IMPLEMENTATION_"/>
+                       <arg value="-Wl,--kill-at"/>
+                       <arg value="-I${jni.include.dir}"/>
+                       <arg value="-I${jni.include.dir}\win32"/>
+                       <arg value="-I${javac.dest}"/>
+                       <arg value="-shared"/>
+                       <arg 
file="${java.source.dir}org/apache/log4j/nt/nteventlog.cpp"/>
+                       <arg file="${javac.dest}/NTEventLogAppender.o"/>
+                       <arg file="${javac.dest}/EventLogCategories.o"/>
+                       <arg value="-o"/>
+                       <arg file="${jar.dest}/NTEventLogAppender.dll"/>
+               </exec>
+
+       </target>
+
+
+
+       <target name="log4j-optional.jar" depends="init, build.core">
     <mkdir dir="${jar.dest}/"/>
     <jar jarfile="${jar.dest}/${log4j-optional.jar}" basedir="${javac.dest}"
             includes="${stem}/net/Multicast*.class,
@@ -547,7 +621,7 @@
   <!-- ================================================================= -->
   <target name="jar" depends="log4j.jar, log4j-optional.jar, 
                                  log4j-jms.jar,  log4j-smtp.jar, 
-                                 log4j-db.jar, log4j-oro.jar, log4j-xml.jar">
+                                 log4j-db.jar, log4j-oro.jar, log4j-xml.jar, 
log4j-nt.jar">
   </target>
 
   <!-- ================================================================= -->
@@ -601,7 +675,8 @@
                ${stem}/net/SocketHub*.class,
                ${stem}/net/Telnet*.class,
                ${stem}/pattern/StackPatternConverter.class,
-               ${stem}/DUMMY.java"
+               ${stem}/DUMMY.java,
+                               ${stem}/nt/*.class"
        >
       <manifest>
         <attribute name="Manifest-version" value="1.0"/>
@@ -827,7 +902,7 @@
  <!-- ================================================================= -->
  <!-- Build a complete distribution. Results go to ${dist.images}       -->
  <!-- ================================================================= -->
-  <target name="dist" depends="init, clean, requiredepsCheck, javadoc, jar, 
site">
+  <target name="dist" depends="init, clean, requiredepsCheck, javadoc, jar, 
site, build.nt.dll">
 
     <delete verbose="true">
       <fileset dir=".">

Modified: 
logging/log4j/trunk/src/java/org/apache/log4j/nt/NTEventLogAppender.java
URL: 
http://svn.apache.org/viewcvs/logging/log4j/trunk/src/java/org/apache/log4j/nt/NTEventLogAppender.java?rev=372308&r1=372307&r2=372308&view=diff
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/nt/NTEventLogAppender.java 
(original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/nt/NTEventLogAppender.java 
Wed Jan 25 12:31:51 2006
@@ -1,12 +1,12 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
- * 
+ * Copyright 1999,2005 The Apache Software Foundation.
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,12 +16,12 @@
 
 package org.apache.log4j.nt;
 
-import org.apache.log4j.*;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Layout;
 import org.apache.log4j.Level;
+import org.apache.log4j.PatternLayout;
 import org.apache.log4j.helpers.LogLog;
-
-import java.io.*;
+import org.apache.log4j.spi.LoggingEvent;
 
 
 /**
@@ -37,87 +37,102 @@
    @author <a href="mailto:[EMAIL PROTECTED]">Chris Taylor</a>
    @author <a href="mailto:[EMAIL PROTECTED]">Jim Cakalic</a> */
 public class NTEventLogAppender extends AppenderSkeleton {
-  private int _handle = 0;
+  private static final int FATAL = Level.FATAL.toInt();
+  private static final int ERROR = Level.ERROR.toInt();
+  private static final int WARN = Level.WARN.toInt();
+  private static final int INFO = Level.INFO.toInt();
+  private static final int DEBUG = Level.DEBUG.toInt();
+
+  static {
+    System.loadLibrary("NTEventLogAppender");
+  }
 
+  private int _handle = 0;
+  private boolean dirty = true;
   private String source = null;
   private String server = null;
 
-  private static final int FATAL  = Level.FATAL.toInt();
-  private static final int ERROR  = Level.ERROR.toInt();
-  private static final int WARN   = Level.WARN.toInt();
-  private static final int INFO   = Level.INFO.toInt();
-  private static final int DEBUG  = Level.DEBUG.toInt();
-
   public NTEventLogAppender() {
     this(null, null, null);
   }
 
-  public NTEventLogAppender(String source) {
+  public NTEventLogAppender(final String source) {
     this(null, source, null);
   }
 
-  public NTEventLogAppender(String server, String source) {
+  public NTEventLogAppender(final String server, final String source) {
     this(server, source, null);
   }
 
-  public NTEventLogAppender(Layout layout) {
+  public NTEventLogAppender(final Layout layout) {
     this(null, null, layout);
   }
 
-  public NTEventLogAppender(String source, Layout layout) {
+  public NTEventLogAppender(final String source, final Layout layout) {
     this(null, source, layout);
   }
 
-  public NTEventLogAppender(String server, String source, Layout layout) {
+  public NTEventLogAppender(
+    final String server, final String source, final Layout layout) {
+    super(false);
+    this.server = server;
+
     if (source == null) {
-      source = "Log4j";
+      this.source = "Log4j";
     }
+
     if (layout == null) {
-      this.layout = new TTCCLayout();
+      this.layout = new PatternLayout("%d [%t] %p %c %x %m%n");
     } else {
       this.layout = layout;
     }
 
-    try {
-      _handle = registerEventSource(server, source);
-    } catch (Exception e) {
-      e.printStackTrace();
-      _handle = 0;
-    }
+    activateOptions();
   }
 
-  public
-  void close() {
+  public void close() {
     // unregister ...
   }
 
-  public
-  void activateOptions() {
-    if (source != null) {
+  public void activateOptions() {
+    if (dirty && (source != null)) {
+      dirty = false;
+
+      if (_handle != 0) {
+        try {
+          deregisterEventSource(_handle);
+        } catch (Exception e) {
+          getLogger().error("Could not deregister event source.", e);
+        }
+      }
+
       try {
-   _handle = registerEventSource(server, source);
+        _handle = registerEventSource(server, source);
+        super.activateOptions();
       } catch (Exception e) {
-   LogLog.error("Could not register event source.", e);
-   _handle = 0;
+        getLogger().error("Could not register event source.", e);
+        _handle = 0;
       }
     }
   }
 
-
-  public void append(LoggingEvent event) {
-
+  public void append(final LoggingEvent event) {
     StringBuffer sbuf = new StringBuffer();
 
     sbuf.append(layout.format(event));
-    if(layout.ignoresThrowable()) {
+
+    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]);
-   }
+        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();
 
@@ -128,9 +143,7 @@
     reportEvent(_handle, sbuf.toString(), nt_category);
   }
 
-
-  public
-  void finalize() {
+  public void finalize() {
     deregisterEventSource(_handle);
     _handle = 0;
   }
@@ -139,29 +152,25 @@
      The <b>Source</b> option which names the source of the event. The
      current value of this constant is <b>Source</b>.
    */
-  public
-  void setSource(String source) {
+  public void setSource(final String source) {
     this.source = source.trim();
+    dirty = true;
   }
 
-  public
-  String getSource() {
+  public String getSource() {
     return source;
   }
 
-/**
-     The <code>NTEventLogAppender</code> requires a layout. Hence,
-     this method always returns <code>true</code>. */
-  public
-  boolean requiresLayout() {
+  /**
+       The <code>NTEventLogAppender</code> requires a layout. Hence,
+       this method always returns <code>true</code>. */
+  public boolean requiresLayout() {
     return true;
   }
 
-  native private int registerEventSource(String server, String source);
-  native private void reportEvent(int handle, String message, int level);
-  native private void deregisterEventSource(int handle);
+  private native int registerEventSource(String server, String source);
 
-  static {
-    System.loadLibrary("NTEventLogAppender");
-  }
+  private native void reportEvent(int handle, String message, int level);
+
+  private native void deregisterEventSource(int handle);
 }

Modified: logging/log4j/trunk/tests/build.xml
URL: 
http://svn.apache.org/viewcvs/logging/log4j/trunk/tests/build.xml?rev=372308&r1=372307&r2=372308&view=diff
==============================================================================
--- logging/log4j/trunk/tests/build.xml (original)
+++ logging/log4j/trunk/tests/build.xml Wed Jan 25 12:31:51 2006
@@ -32,8 +32,8 @@
   <!-- distribution directory -->
   <property name="project.home" value=".."/>
   <property name="project.dist.dir" value="${project.home}/dist"/>
-  
-  <!-- The directory where source files are stored. -->
+
+    <!-- The directory where source files are stored. -->
   <property name="project.source.home" value="${project.home}/src/java/"/>
   <property name="project.classes.home" value="${project.dist.dir}/classes/"/>
   
@@ -141,6 +141,7 @@
     <ant dir=".." target="build.servletAPI" inheritRefs="false"/>
     <ant dir=".." target="build.oro" inheritRefs="false"/>
     <ant dir=".." target="build.smtp" inheritRefs="false"/>
+    <ant dir=".." target="build.nt" inheritRefs="false"/>
   </target>
 
   <!-- ================================================================= -->
@@ -221,6 +222,7 @@
                                      FileWatchdog,
                                      CachedDateFormat,
                                         Encoding,
+                                     NTEventLogAppender,
                                         Syslog
                                      "/>
 
@@ -747,7 +749,31 @@
     </junit>
   </target>
 
-  <target name="Syslog" depends="build">
+    <target name="build.nt.init">
+        <available file="${project.dist.dir}/lib/NTEventLogAppender.dll" 
property="nt.dll.available"/>
+        <condition property="is-windows" value="true">
+            <os family="windows"/>
+        </condition>
+    </target>
+
+    <target name="build.nt.dll" if="is-windows" unless="nt.dll.available" 
depends="build.nt.init">
+        <ant dir=".." target="build.nt.dll" inheritRefs="false"/>
+    </target>
+
+  <target name="NTEventLogAppender" depends="build, build.nt.dll" 
if="is-windows">
+        <junit printsummary="yes" 
+            fork="yes" 
+            haltonfailure="${haltonfailure}"
+            dir="${project.dist.dir}/lib">
+            <classpath refid="tests.classpath"/>
+            <formatter type="plain" usefile="false"/>
+            <test name="org.apache.log4j.nt.NTEventLogAppenderTest" />
+        </junit>
+   </target>
+
+
+
+    <target name="Syslog" depends="build">
       <junit printsummary="yes" fork="yes" haltonfailure="${haltonfailure}">
         <classpath refid="tests.classpath"/>
         <formatter type="plain" usefile="false"/>

Modified: 
logging/log4j/trunk/tests/src/java/org/apache/log4j/nt/NTEventLogAppenderTest.java
URL: 
http://svn.apache.org/viewcvs/logging/log4j/trunk/tests/src/java/org/apache/log4j/nt/NTEventLogAppenderTest.java?rev=372308&r1=372307&r2=372308&view=diff
==============================================================================
--- 
logging/log4j/trunk/tests/src/java/org/apache/log4j/nt/NTEventLogAppenderTest.java
 (original)
+++ 
logging/log4j/trunk/tests/src/java/org/apache/log4j/nt/NTEventLogAppenderTest.java
 Wed Jan 25 12:31:51 2006
@@ -15,11 +15,13 @@
  */
 
 package org.apache.log4j.nt;
+
 import junit.framework.TestCase;
-import org.apache.log4j.Logger;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Level;
+
 import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
 
 
 /**
@@ -29,7 +31,6 @@
  * @author Curt Arnold
  */
 public class NTEventLogAppenderTest extends TestCase {
-
   /**
    *   Clean up configuration after each test.
    */
@@ -42,13 +43,15 @@
    */
   public void testSimple() {
     BasicConfigurator.configure(new NTEventLogAppender());
-    Logger logger = 
Logger.getLogger("org.apache.log4j.nt.NTEventLogAppenderTest");
-    int i  = 0;
-    logger.debug( "Message " + i++);
-    logger.info( "Message " + i++);
-    logger.warn( "Message " + i++);
-    logger.error( "Message " + i++);
+
+    Logger logger =
+      Logger.getLogger("org.apache.log4j.nt.NTEventLogAppenderTest");
+    int i = 0;
+    logger.debug("Message " + i++);
+    logger.info("Message " + i++);
+    logger.warn("Message " + i++);
+    logger.error("Message " + i++);
     logger.log(Level.FATAL, "Message " + i++);
-    logger.debug("Message " + i++,  new Exception("Just testing."));
+    logger.debug("Message " + i++, new Exception("Just testing."));
   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to