You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-cvs@jakarta.apache.org by ce...@locus.apache.org on 2000/12/20 16:57:35 UTC
cvs commit: jakarta-log4j/org/apache/log4j/xml/test SubClassTest.java
ceki 00/12/20 07:57:34
Modified: org/apache/log4j HTMLLayout.java Makefile NDC.java
org/apache/log4j/nt NTEventLogAppender.java make.bat
nteventlog.cpp
org/apache/log4j/xml/examples XMLSample.java XTest.java
org/apache/log4j/xml/test SubClassTest.java
Log:
Modified HTMLLayout to print LocationInfo and to print WARN, ERROR, FATAL messages in red.
Revision Changes Path
1.6 +71 -8 jakarta-log4j/org/apache/log4j/HTMLLayout.java
Index: HTMLLayout.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/HTMLLayout.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- HTMLLayout.java 2000/12/19 13:59:19 1.5
+++ HTMLLayout.java 2000/12/20 15:57:23 1.6
@@ -8,6 +8,7 @@
package org.apache.log4j;
import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.helpers.OptionConverter;
import java.io.StringWriter;
import java.io.PrintWriter;
import java.io.Writer;
@@ -21,6 +22,18 @@
// output buffer appended to when format() is invoked
private StringBuffer sbuf = new StringBuffer(BUF_SIZE);
+ /**
+ A string constant used in naming the option for setting the the
+ location information flag. Current value of this string
+ constant is <b>LocationInfo</b>.
+
+ <p>Note that all option keys are case sensitive.
+ */
+ public static final String LOCATION_INFO_OPTION = "LocationInfo";
+
+ // Print no location info by default
+ boolean locationInfo = false;
+
public
void activateOptions() {
}
@@ -44,8 +57,15 @@
sbuf.append(event.getThreadName());
sbuf.append("</td>\r\n");
+
sbuf.append("<td>");
- sbuf.append(event.priority);
+ if(event.priority.isGreaterOrEqual(Priority.WARN)) {
+ sbuf.append("<font color=\"#FF0000\">");
+ sbuf.append(event.priority);
+ sbuf.append("</font>");
+ } else {
+ sbuf.append(event.priority);
+ }
sbuf.append("</td>\r\n");
sbuf.append("<td>");
@@ -56,6 +76,15 @@
sbuf.append(event.getNDC());
sbuf.append("</td>\r\n");
+ if(locationInfo) {
+ event.setLocationInformation();
+ sbuf.append("<td>");
+ sbuf.append(event.locationInfo.getFileName());
+ sbuf.append(':');
+ sbuf.append(event.locationInfo.getLineNumber());
+ sbuf.append("</td>\r\n");
+ }
+
sbuf.append("<td>");
sbuf.append(event.message);
@@ -65,7 +94,7 @@
sbuf.append("</tr>");
if(event.throwable != null) {
- sbuf.append("\r\n<tr><td colspan=\"6\">");
+ sbuf.append("\r\n<tr><td colspan=\"7\">");
sbuf.append(getThrowableAsHTML(event.throwable));
sbuf.append("</td></tr>");
}
@@ -90,10 +119,16 @@
*/
public
String getHeader() {
- return "<html><body>\r\n"+
- "<table border=\"1\" cellpadding=\"2\">\r\n<tr>\r\n"+
- "<th>Time</th><th>Thread</th><th>Priority</th><th>Category</th>"+
- "<th>NDC</th><th>Message</th></tr>";
+ StringBuffer sbuf = new StringBuffer();
+ sbuf.append("<html><body>\r\n");
+ sbuf.append("<table border=\"1\" cellpadding=\"2\">\r\n<tr>\r\n");
+ sbuf.append("<th>Time</th><th>Thread</th><th>Priority</th><th>Category</th>");
+ sbuf.append("<th>NDC</th>");
+ if(locationInfo) {
+ sbuf.append("<th>File:Line</th>");
+ }
+ sbuf.append("<th>Message</th></tr>");
+ return sbuf.toString();
}
/**
@@ -107,7 +142,7 @@
public
String[] getOptionStrings() {
- return new String[0];
+ return new String[] {LOCATION_INFO_OPTION};
}
String getThrowableAsHTML(Throwable throwable) {
@@ -127,10 +162,33 @@
return false;
}
+ /**
+ Set HTMLLayout specific options.
+
+ <p>The <b>LocationInfo</b> option takes a boolean value. By
+ default, it is set to false which means there will be no location
+ information output by this layoout. If the the option is set to
+ true, then the file name and line number of the statement
+ at the origin of the log statement will be output.
+
+ <p>If you are embedding this layout within an {@link
+ org.apache.log4j.net.SMTPAppender} then make sure to set the
+ <b>LocationInfo</b> option of that appender as well.
+
+ */
public
void setOption(String key, String value) {
+ if(value == null) return;
+
+ if (key.equals(LOCATION_INFO_OPTION)) {
+ locationInfo = OptionConverter.toBoolean(value, locationInfo);
+ }
}
+
+ /**
+ Format exceptions in HTML aware way.
+ */
static class HTMLPrintWriter extends PrintWriter {
static String TRACE_PREFIX = "<br> ";
@@ -140,13 +198,18 @@
super(writer);
}
+ /**
+ Some JDKs use prinln(char[])
+ */
public
void println(char[] c) {
write(TRACE_PREFIX);
this.write(c);
}
-
+ /**
+ Yet others use println(String). Go figure.
+ */
public
void println(String s) {
write(TRACE_PREFIX);
1.3 +1 -1 jakarta-log4j/org/apache/log4j/Makefile
Index: Makefile
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/Makefile,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Makefile 2000/12/14 21:07:18 1.2
+++ Makefile 2000/12/20 15:57:24 1.3
@@ -21,7 +21,7 @@
Appender.java \
Priority.java\
-SUBDIRS :=helpers spi or xml gui net nt varia test performance examples
+SUBDIRS :=helpers spi or xml net nt varia test performance examples gui
# include master-rule file
1.3 +2 -3 jakarta-log4j/org/apache/log4j/NDC.java
Index: NDC.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/NDC.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NDC.java 2000/12/14 21:07:18 1.2
+++ NDC.java 2000/12/20 15:57:24 1.3
@@ -248,9 +248,8 @@
int size = v.size();
for(int i = 0; i < size; i++) {
Thread t = (Thread) v.elementAt(i);
- System.out.println("Lazy NDC removal for thread [" + t.getName() + "] ("
- + ht.size() + ").");
-
+ LogLog.debug("Lazy NDC removal for thread [" + t.getName() + "] ("+
+ ht.size() + ").");
ht.remove(t);
}
}
1.3 +1 -1 jakarta-log4j/org/apache/log4j/nt/NTEventLogAppender.java
Index: NTEventLogAppender.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/nt/NTEventLogAppender.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NTEventLogAppender.java 2000/12/14 21:08:00 1.2
+++ NTEventLogAppender.java 2000/12/20 15:57:27 1.3
@@ -17,7 +17,7 @@
Append to the NT event log system.
<p><b>WARNING</b> This appender can only be installed and used on a
- Windows system.
+ Windows system under <b>JDK 1.2</b> or above.
<p>Do not forget to place the file NTEventLogAppender.dll in a
directory that is on the PATH of the Windows system. Otherwise, you
1.2 +3 -2 jakarta-log4j/org/apache/log4j/nt/make.bat
Index: make.bat
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/nt/make.bat,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- make.bat 2000/12/14 09:31:31 1.1
+++ make.bat 2000/12/20 15:57:27 1.2
@@ -2,13 +2,14 @@
REM This batch file is not intended for general use.
-javah org.log4j.nt.NTEventLogAppender
-javah org.log4j.Priority
+javah org.apache.log4j.nt.NTEventLogAppender
+javah org.apache.log4j.Priority
MC EventLogCategories.mc
RC -r -fo EventLogCategories.res EventLogCategories.rc
+#SET JDK=c:\java\jdk1.1.7B\
SET JDK=c:\java\jdk1.3\
@echo "Compiling"
1.2 +15 -18 jakarta-log4j/org/apache/log4j/nt/nteventlog.cpp
Index: nteventlog.cpp
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/nt/nteventlog.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- nteventlog.cpp 2000/12/14 09:31:31 1.1
+++ nteventlog.cpp 2000/12/20 15:57:28 1.2
@@ -1,7 +1,7 @@
#ifndef NtEventLogAppender_h
#define NtEventLogAppender_h
-#include "org_log4j_Priority.h"
-#include "org_log4j_nt_NTEventLogAppender.h"
+#include "org_apache_log4j_Priority.h"
+#include "org_apache_log4j_nt_NTEventLogAppender.h"
#include <windows.h>
// Borrowed unabashedly from the JNI Programmer's Guide
@@ -24,10 +24,10 @@
jthrowable exc;
char *nstr = 0;
- if (env->EnsureLocalCapacity(2) < 0) {
- // out of memory
- return 0;
- }
+ //if (env->EnsureLocalCapacity(2) < 0) {
+ // out of memory
+ //return 0;
+ //}
if (midStringGetBytes == 0) {
// Lookup and cache the String.getBytes() method id.
@@ -88,18 +88,15 @@
WORD ret_val;
switch (priority) {
- case org_log4j_Priority_EMERG_INT:
- case org_log4j_Priority_ALERT_INT:
- case org_log4j_Priority_CRIT_INT:
- case org_log4j_Priority_ERROR_INT:
+ case org_apache_log4j_Priority_FATAL_INT:
+ case org_apache_log4j_Priority_ERROR_INT:
ret_val = EVENTLOG_ERROR_TYPE;
break;
- case org_log4j_Priority_WARN_INT:
+ case org_apache_log4j_Priority_WARN_INT:
ret_val = EVENTLOG_WARNING_TYPE;
break;
- case org_log4j_Priority_NOTICE_INT:
- case org_log4j_Priority_INFO_INT:
- case org_log4j_Priority_DEBUG_INT:
+ case org_apache_log4j_Priority_INFO_INT:
+ case org_apache_log4j_Priority_DEBUG_INT:
default:
ret_val = EVENTLOG_INFORMATION_TYPE;
break;
@@ -154,7 +151,7 @@
* Method: registerEventSource
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
-JNIEXPORT jint JNICALL Java_org_log4j_nt_NTEventLogAppender_registerEventSource(
+JNIEXPORT jint JNICALL Java_org_apache_log4j_nt_NTEventLogAppender_registerEventSource(
JNIEnv *env, jobject java_this, jstring server, jstring source) {
char *nserver = 0;
@@ -174,11 +171,11 @@
}
/*
- * Class: org_log4j_nt_NTEventLogAppender
+ * Class: org_apache_log4j_nt_NTEventLogAppender
* Method: reportEvent
* Signature: (ILjava/lang/String;I)V
*/
-JNIEXPORT void JNICALL Java_org_log4j_nt_NTEventLogAppender_reportEvent(
+JNIEXPORT void JNICALL Java_org_apache_log4j_nt_NTEventLogAppender_reportEvent(
JNIEnv *env, jobject java_this, jint handle, jstring jstr, jint priority) {
jboolean localHandle = JNI_FALSE;
@@ -215,7 +212,7 @@
* Method: deregisterEventSource
* Signature: (I)V
*/
-JNIEXPORT void JNICALL Java_org_log4j_nt_NTEventLogAppender_deregisterEventSource(
+JNIEXPORT void JNICALL Java_org_apache_log4j_nt_NTEventLogAppender_deregisterEventSource(
JNIEnv *env,
jobject java_this,
jint handle)
1.3 +1 -28 jakarta-log4j/org/apache/log4j/xml/examples/XMLSample.java
Index: XMLSample.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/xml/examples/XMLSample.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XMLSample.java 2000/12/14 21:08:41 1.2
+++ XMLSample.java 2000/12/20 15:57:30 1.3
@@ -4,9 +4,6 @@
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.log4j.Category;
import org.apache.log4j.Priority;
-import org.apache.xerces.parsers.DOMParser;
-import java.io.FileInputStream;
-import org.xml.sax.InputSource;
import java.net.*;
/**
@@ -49,31 +46,7 @@
static
void init(String configFile) {
- try {
- DOMParser domParser = new DOMParser();
- // We want validation.
- domParser.setFeature("http://xml.org/sax/features/validation", true);
- domParser.setErrorHandler(new ReportParserError());
- InputSource inputSource = new InputSource(new FileInputStream(configFile));
- // log4j.dtd is placed in org.apache.log4j/xml/log4j.dtd. The
- // DOMConfigurator class is placed in the same directory and can
- // find it.
- URL dtdURL = DOMConfigurator.class.getResource("log4j.dtd");
- if(dtdURL == null) {
- System.err.println("Could not find log4j.dtd.");
- }
- else {
- System.err.println("URL to log4j.dtd is " + dtdURL.toString());
- inputSource.setSystemId(dtdURL.toString());
- }
- domParser.parse(inputSource);
- DOMConfigurator.configure(domParser.getDocument().getDocumentElement() );
- }
- catch(Exception e) {
- System.err.println("Could not initialize XMLSample program.");
- e.printStackTrace();
- System.exit(1);
- }
+ DOMConfigurator.configure(configFile);
}
static
1.3 +1 -32 jakarta-log4j/org/apache/log4j/xml/examples/XTest.java
Index: XTest.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/xml/examples/XTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XTest.java 2000/12/14 21:08:41 1.2
+++ XTest.java 2000/12/20 15:57:30 1.3
@@ -1,16 +1,9 @@
package org.apache.log4j.xml.examples;
-
-import org.apache.xerces.parsers.DOMParser;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.log4j.Category;
import org.apache.log4j.Priority;
-//import org.apache.log4j.helpers.CategoryFactory;
-import org.apache.log4j.xml.examples.XPriority;
-import org.apache.xerces.parsers.DOMParser;
-import java.io.FileInputStream;
-import org.xml.sax.InputSource;
import java.net.*;
/**
@@ -55,31 +48,7 @@
static
void init(String configFile) {
- try {
- DOMParser domParser = new DOMParser();
- // We want validation.
- domParser.setFeature("http://xml.org/sax/features/validation", true);
- domParser.setErrorHandler(new ReportParserError());
- InputSource inputSource = new InputSource(new FileInputStream(configFile));
- // log4j.dtd is placed in org.apache.log4j/xml/log4j.dtd. The
- // DOMConfigurator class is placed in the same directory and can
- // find it.
- URL dtdURL = DOMConfigurator.class.getResource("log4j.dtd");
- if(dtdURL == null) {
- System.err.println("Could not find log4j.dtd.");
- }
- else {
- System.err.println("URL to log4j.dtd is " + dtdURL.toString());
- inputSource.setSystemId(dtdURL.toString());
- }
- domParser.parse(inputSource);
- DOMConfigurator.configure(domParser.getDocument().getDocumentElement());
- }
- catch(Exception e) {
- System.err.println("Could not initialize XMLSample program.");
- e.printStackTrace();
- System.exit(1);
- }
+ DOMConfigurator.configure(configFile);
}
static
1.3 +4 -15 jakarta-log4j/org/apache/log4j/xml/test/SubClassTest.java
Index: SubClassTest.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/org/apache/log4j/xml/test/SubClassTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SubClassTest.java 2000/12/14 21:08:42 1.2
+++ SubClassTest.java 2000/12/20 15:57:32 1.3
@@ -5,9 +5,9 @@
import org.apache.log4j.Category;
import org.apache.log4j.Priority;
import org.apache.log4j.xml.examples.ReportParserError;
-import org.apache.xerces.parsers.DOMParser;
-import java.io.FileInputStream;
-import org.xml.sax.InputSource;
+//import org.apache.xerces.parsers.DOMParser;
+//import java.io.FileInputStream;
+//import org.xml.sax.InputSource;
/**
@author Ceki Gülcü
@@ -40,18 +40,7 @@
static
void init(String configFile) {
- try {
- DOMParser domParser = new DOMParser();
- domParser.setFeature("http://xml.org/sax/features/validation", true);
- domParser.setErrorHandler(new ReportParserError());
- domParser.parse(new InputSource(configFile));
- DOMConfigurator.configure(domParser.getDocument().getDocumentElement() );
- }
- catch(Exception e) {
- System.err.println("Could not initialize test program.");
- e.printStackTrace();
- System.exit(1);
- }
+ DOMConfigurator.configure(configFile);
}
static