ceki 01/08/14 14:00:34
Modified: src/java/org/apache/log4j AsyncAppender.java
DailyRollingFileAppender.java FileAppender.java
Makefile RollingFileAppender.java
src/java/org/apache/log4j/helpers PatternParser.java
src/java/org/apache/log4j/spi LoggingEvent.java
src/java/org/apache/log4j/test confParsing
Removed: src/java/org/apache/log4j CompositeRollingAppender.java
Log:
Added MDC support in AsyncAppender.
Added bufferedIO support in FileAppender and subclasses.
Removed CompositeRollingAppender because I do not understand and hence cannot
maintain it.
Revision Changes Path
1.23 +3 -0 jakarta-log4j/src/java/org/apache/log4j/AsyncAppender.java
Index: AsyncAppender.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/AsyncAppender.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- AsyncAppender.java 2001/07/26 11:16:48 1.22
+++ AsyncAppender.java 2001/08/14 21:00:34 1.23
@@ -108,6 +108,9 @@
// LoggingEvent fields were not set at event creation time.
event.getNDC();
event.getThreadName();
+ // Get a copy of this thread's MDC.
+
+ event.getMDCCopy();
if(locationInfo) {
event.getLocationInformation();
}
1.17 +1 -1
jakarta-log4j/src/java/org/apache/log4j/DailyRollingFileAppender.java
Index: DailyRollingFileAppender.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/DailyRollingFileAppender.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- DailyRollingFileAppender.java 2001/07/26 11:16:48 1.16
+++ DailyRollingFileAppender.java 2001/08/14 21:00:34 1.17
@@ -300,7 +300,7 @@
try {
// This will also close the file. This is OK since multiple
// close operations are safe.
- this.setFile(fileName, false);
+ this.setFile(fileName, false, this.bufferedIO, this.bufferSize);
}
catch(IOException e) {
errorHandler.error("setFile("+fileName+", false) call failed.");
1.28 +73 -89 jakarta-log4j/src/java/org/apache/log4j/FileAppender.java
Index: FileAppender.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/FileAppender.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- FileAppender.java 2001/08/13 15:12:10 1.27
+++ FileAppender.java 2001/08/14 21:00:34 1.28
@@ -27,10 +27,9 @@
/**
FileAppender appends log events to a file.
- <b>Support for java.io.Writer and console appending has been
- deprecated and will be removed in the near future.</b> You are
- strongly encouraged to use the replacement solutions: {@link
- WriterAppender} and {@link ConsoleAppender}.
+ <p>Support for <code>java.io.Writer</code> and console appending
+ has been deprecated and then removed. See the replacement
+ solutions: {@link WriterAppender} and {@link ConsoleAppender}.
@author Ceki Gülcü */
@@ -51,16 +50,13 @@
protected String fileName = null;
/**
- Is the QuietWriter ours or was it created and passed by the user?
-
- @deprecated FileAppender will not support streams passed by the
- user in the future. */
- protected boolean qwIsOurs = false;
-
- /**
Do we do bufferedIO? */
protected boolean bufferedIO = false;
+ /**
+ How big should the IO buffer be? Default is 8K. */
+ protected int bufferSize = 8*1024;
+
/**
The default constructor does not do anything.
@@ -69,37 +65,25 @@
FileAppender() {
}
-
/**
- Instantiate a FileAppender and set the output destination to a
- new {@link OutputStreamWriter} initialized with <code>os</code>
- as its {@link OutputStream}.
-
- @deprecated <b>The functionality of this constructor form has
- been replaced by the {@link WriterAppender}. This constructor
- will be removed in the <em>near</em> term.</b>
+ Instantiate a <code>FileAppender</code> and open the file
+ designated by <code>filename</code>. The opened filename will
+ become the output destination for this appender.
- */
- public
- FileAppender(Layout layout, OutputStream os) {
- super(layout, os);
- }
-
- /**
- Instantiate a FileAppender and set the output destination to
- <code>writer</code>.
-
- <p>The <code>writer</code> must have been opened by the user.
+ <p>If the <code>append</code> parameter is true, the file will be
+ appended to. Otherwise, the file designated by
+ <code>filename</code> will be truncated before being opened.
- @deprecated <b>The functionality of constructor form has been
- replaced by the {@link WriterAppender}. This constructor will be
- removed in the <em>near</em> term.</b>
+ <p>If the <code>bufferedIO</code> parameter is <code>true</code>,
+ then buffered IO will be used to write to the output file.
+
*/
public
- FileAppender(Layout layout, Writer writer) {
- super(layout, writer);
- }
-
+ FileAppender(Layout layout, String filename, boolean append, boolean bufferedIO,
+ int bufferSize) throws IOException {
+ this.layout = layout;
+ this.setFile(filename, append, bufferedIO, bufferSize);
+ }
/**
Instantiate a FileAppender and open the file designated by
@@ -111,10 +95,9 @@
<code>filename</code> will be truncated before being opened.
*/
public
- FileAppender(Layout layout, String filename, boolean append)
- throws IOException {
+ FileAppender(Layout layout, String filename, boolean append) throws IOException {
this.layout = layout;
- this.setFile(filename, append);
+ this.setFile(filename, append, false, bufferSize);
}
/**
@@ -130,32 +113,18 @@
/**
The <b>File</b> property takes a string value which should be the
- name of the file to append to. Special values "System.out" or
- "System.err" are interpreted as the standard out and standard
- error streams.
-
- <p><font color="#DD0044"><b>Note that the "System.out" or "System.err"
- options are deprecated. Please use {@link ConsoleAppender}
- instead.</b></font>
-
- <p>If the option is set to "System.out" or "System.err" the
- output will go to the corresponding stream. Otherwise, if the
- option is set to the name of a file, then the file will be opened
- and output will go there.
-
+ name of the file to append to.
+
+ <p><font color="#DD0044"><b>Note that the special values
+ "System.out" or "System.err" are no longer honored.</b></font>
+
<p>Note: Actual opening of the file is made when {@link
#activateOptions} is called, not when the options are set. */
public void setFile(String file) {
// Trim spaces from both ends. The users probably does not want
// trailing spaces in file names.
String val = file.trim();
- if(val.equalsIgnoreCase("System.out")) {
- setWriter(new OutputStreamWriter(System.out));
- } else if(val.equalsIgnoreCase("System.err")) {
- setWriter(new OutputStreamWriter(System.err));
- } else {
- fileName = val;
- }
+ fileName = val;
}
/**
@@ -172,23 +141,7 @@
String getFile() {
return fileName;
}
-
- /**
- The <b>Append</b> option takes a boolean value. It is set to
- <code>true</code> by default. If true, then <code>File</code>
- will be opened in append mode by {@link #setFile setFile} (see
- above). Otherwise, {@link #setFile setFile} will open
- <code>File</code> in truncate mode.
- <p>Note: Actual opening of the file is made when {@link
- #activateOptions} is called, not when the options are set.
- */
- public
- void setAppend(boolean flag) {
- fileAppend = flag;
- }
-
-
/**
If the value of <b>File</b> is not <code>null</code>, then {@link
#setFile} is called with the values of <b>File</b> and
@@ -196,10 +149,10 @@
@since 0.8.1 */
public
- void activateOptions() {
+ void activateOptions() {
if(fileName != null) {
try {
- setFile(fileName, fileAppend);
+ setFile(fileName, fileAppend, bufferedIO, bufferSize);
}
catch(java.io.IOException e) {
errorHandler.error("setFile("+fileName+","+fileAppend+") call failed.",
@@ -217,8 +170,7 @@
*/
protected
void closeFile() {
- // FIXME (remove qwIsOurs)
- if(this.qw != null && this.qwIsOurs) {
+ if(this.qw != null) {
try {
this.qw.close();
}
@@ -231,6 +183,38 @@
}
/**
+ The <b>Append</b> option takes a boolean value. It is set to
+ <code>true</code> by default. If true, then <code>File</code>
+ will be opened in append mode by {@link #setFile setFile} (see
+ above). Otherwise, {@link #setFile setFile} will open
+ <code>File</code> in truncate mode.
+
+ <p>Note: Actual opening of the file is made when {@link
+ #activateOptions} is called, not when the options are set.
+ */
+ public
+ void setAppend(boolean flag) {
+ fileAppend = flag;
+ }
+
+ /**
+ The <b>BufferedIO</b> option takes a boolean value. It is set to
+ <code>false</code> by default. If true, then <code>File</code>
+ will be opened and the resulting {@link java.io.Writer} wrapped
+ around a {@link BufferedWriter}.
+
+ BufferedIO will significatnly increase performance on heavily
+ loaded systems.
+
+ */
+ public
+ void setBufferedIO(boolean bufferedIO) {
+ this.bufferedIO = bufferedIO;
+ }
+
+
+
+ /**
<p>Sets and <i>opens</i> the file where the log output will
go. The specified file must be writable.
@@ -242,9 +226,14 @@
truncate fileName. */
public
synchronized
- void setFile(String fileName, boolean append)
+ void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
LogLog.debug("setFile called: "+fileName+", "+append);
+
+ // It does not make sense to have immediate flush and bufferedIO.
+ if(bufferedIO) {
+ setImmediateFlush(false);
+ }
reset();
Writer fw = new FileWriter(fileName, append);
@@ -252,10 +241,10 @@
fw = new BufferedWriter(fw);
}
this.setQWForFiles(fw);
- //this.tp = new TracerPrintWriter(qw);
this.fileName = fileName;
this.fileAppend = append;
- this.qwIsOurs = true;
+ this.bufferedIO = bufferedIO;
+ this.bufferSize = bufferSize;
writeHeader();
LogLog.debug("setFile ended");
}
@@ -279,12 +268,7 @@
void reset() {
closeFile();
this.fileName = null;
- if(qwIsOurs) {
- super.reset();
- } else {
- this.qw = null;
- //this.tp = null;
- }
+ super.reset();
}
}
1.14 +1 -1 jakarta-log4j/src/java/org/apache/log4j/Makefile
Index: Makefile
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Makefile,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Makefile 2001/08/06 16:38:14 1.13
+++ Makefile 2001/08/14 21:00:34 1.14
@@ -3,7 +3,6 @@
DEPTH :=../../../../..
JSOURCES:=HTMLLayout.java\
DailyRollingFileAppender.java\
- CompositeRollingAppender.java\
RollingFileAppender.java\
PropertyConfigurator.java\
PatternLayout.java\
@@ -25,6 +24,7 @@
WriterAppender.java\
ConsoleAppender.java\
MDC.java\
+
ifdef $(ISJDK1)
JSOURCES:=$(JSOURCES) RollingFileAppenderBeanInfo.java
1.15 +4 -3 jakarta-log4j/src/java/org/apache/log4j/RollingFileAppender.java
Index: RollingFileAppender.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/RollingFileAppender.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- RollingFileAppender.java 2001/07/20 16:57:15 1.14
+++ RollingFileAppender.java 2001/08/14 21:00:34 1.15
@@ -147,7 +147,7 @@
try {
// This will also close the file. This is OK since multiple
// close operations are safe.
- this.setFile(fileName, false);
+ this.setFile(fileName, false, bufferedIO, bufferSize);
}
catch(IOException e) {
LogLog.error("setFile("+fileName+", false) call failed.", e);
@@ -156,8 +156,9 @@
public
synchronized
- void setFile(String fileName, boolean append) throws IOException {
- super.setFile(fileName, append);
+ void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)
+ throws IOException
{
+ super.setFile(fileName, append, this.bufferedIO, this.bufferSize);
if(append) {
File f = new File(fileName);
((CountingQuietWriter) qw).setCount(f.length());
1.13 +1 -2
jakarta-log4j/src/java/org/apache/log4j/helpers/PatternParser.java
Index: PatternParser.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/helpers/PatternParser.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- PatternParser.java 2001/08/06 19:29:19 1.12
+++ PatternParser.java 2001/08/14 21:00:34 1.13
@@ -12,7 +12,6 @@
import org.apache.log4j.helpers.AbsoluteTimeDateFormat;
import org.apache.log4j.Layout;
import org.apache.log4j.NDC;
-import org.apache.log4j.MDC;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.LocationInfo;
import org.apache.log4j.or.ObjectRenderer;
@@ -456,7 +455,7 @@
public
String convert(LoggingEvent event) {
- Object val = MDC.get(key);
+ Object val = event.getMDC(key);
if(val == null) {
return null;
} else {
1.18 +11 -20 jakarta-log4j/src/java/org/apache/log4j/spi/LoggingEvent.java
Index: LoggingEvent.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/spi/LoggingEvent.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- LoggingEvent.java 2001/08/13 10:22:10 1.17
+++ LoggingEvent.java 2001/08/14 21:00:34 1.18
@@ -176,6 +176,13 @@
return ndc;
}
+
+ /**
+ Retrung the the context corresponding to the <code>key</code>
+ parameter. If there is a local MDC copy (probably from a remote
+ machine, the search try it first, if that fails then search this
+ thread's <code>MDC</code>.
+ */
public
Object getMDC(String key) {
Object r;
@@ -189,32 +196,16 @@
return MDC.get(key);
}
- protected
+ /**
+ Obtain a copy of this thread's MDC prior to serialization or
+ asynchronous logging. */
+ public
void getMDCCopy() {
if(mdcLookupRequired) {
ndcLookupRequired = false;
mdcCopy = MDC.getContext();
}
}
-
-
-
- // if(mdcLookupRequired) {
- // mdcLookupRequired = false;
- // mdc = MDC.getContext();
- // if(mdc != null)
- // return mdc.get(key);
- // }
- //
- //
- // Object r = mdc.get(key);
- // if(r == null) {
- // return MDC.get(key);
- // } else {
- // return r;
- // }
- //}
-
public
String getRenderedMessage() {
1.8 +1 -2 jakarta-log4j/src/java/org/apache/log4j/test/confParsing
Index: confParsing
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/test/confParsing,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- confParsing 2001/04/17 22:32:38 1.7
+++ confParsing 2001/08/14 21:00:34 1.8
@@ -182,9 +182,8 @@
D_FLAG=""
echo "log4j.rootCategory= DEBUG , testAppender" > $LCF
lecho "log4j.debug=false"
- lecho "log4j.appender.testAppender=org.apache.log4j.FileAppender"
+ lecho "log4j.appender.testAppender=org.apache.log4j.ConsoleAppender"
# Note the spaces
- lecho "log4j.appender.testAppender.File=System.out "
lecho "log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout "
lecho "log4j.appender.testAppender.layout.ConversionPattern=[%t] %p - %m%n"
echo -n " ConfigurationParsing test $TEST - "
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]