Author: carnold Date: Thu Feb 22 14:35:24 2007 New Revision: 510695 URL: http://svn.apache.org/viewvc?view=rev&rev=510695 Log: Bug 40161: SyslogAppender is not logging header of the layout
Modified: logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java Modified: logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java?view=diff&rev=510695&r1=510694&r2=510695 ============================================================================== --- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java (original) +++ logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SyslogAppender.java Thu Feb 22 14:35:24 2007 @@ -117,6 +117,11 @@ */ private String localHostname; + /** + * Set to true after the header of the layout has been sent or if it has none. + */ + private boolean layoutHeaderChecked = false; + public SyslogAppender() { this.initSyslogFacilityStr(); @@ -146,6 +151,9 @@ closed = true; if (sqw != null) { try { + if (layoutHeaderChecked && layout != null && layout.getFooter() != null) { + sendLayoutMessage(layout.getFooter()); + } sqw.close(); sqw = null; } catch(java.io.IOException ex) { @@ -275,6 +283,13 @@ return; } + if (!layoutHeaderChecked) { + if (layout != null && layout.getHeader() != null) { + sendLayoutMessage(layout.getHeader()); + } + layoutHeaderChecked = true; + } + String hdr = getPacketHeader(event.timeStamp); String packet = layout.format(event); if(facilityPrinting || hdr.length() > 0) { @@ -312,6 +327,10 @@ if (header) { getLocalHostname(); } + if (layout != null && layout.getHeader() != null) { + sendLayoutMessage(layout.getHeader()); + } + layoutHeaderChecked = true; } /** @@ -458,5 +477,26 @@ return buf.toString(); } return ""; + } + + /** + * Set header or footer of layout. + * @param msg message body, may not be null. + */ + private void sendLayoutMessage(final String msg) { + if (sqw != null) { + String packet = msg; + String hdr = getPacketHeader(new Date().getTime()); + if(facilityPrinting || hdr.length() > 0) { + StringBuffer buf = new StringBuffer(hdr); + if(facilityPrinting) { + buf.append(facilityStr); + } + buf.append(msg); + packet = buf.toString(); + } + sqw.setLevel(6); + sqw.write(packet); + } } } Modified: logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java URL: http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java?view=diff&rev=510695&r1=510694&r2=510695 ============================================================================== --- logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java (original) +++ logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java Thu Feb 22 14:35:24 2007 @@ -25,6 +25,7 @@ import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.VectorErrorHandler; +import org.apache.log4j.HTMLLayout; import java.util.StringTokenizer; import java.net.DatagramSocket; @@ -507,6 +508,38 @@ syslogDate = cal.getTime(); assertTrue(syslogDate.compareTo(preDate) >= 0); assertTrue(syslogDate.compareTo(postDate) <= 0); + } + + + /** + * Tests that any header or footer in layout is sent. + * @throws Exception if exception during test. + */ + public void testLayoutHeader() throws Exception { + DatagramSocket ds = new DatagramSocket(); + ds.setSoTimeout(2000); + DatagramPacket p = new DatagramPacket(new byte[1000], 0, 1000); + + SyslogAppender appender = new SyslogAppender(); + appender.setSyslogHost("localhost:" + ds.getLocalPort()); + appender.setName("name"); + appender.setHeader(false); + HTMLLayout pl = new HTMLLayout(); + appender.setLayout(pl); + appender.activateOptions(); + + Logger l = Logger.getRootLogger(); + l.addAppender(appender); + l.info("Hello, World"); + appender.close(); + String[] s = new String[3]; + for(int i = 0; i < 3; i++) { + ds.receive(p); + s[i] = new String(p.getData(), 0, p.getLength()); + } + ds.close(); + assertEquals("<14><!DOCTYPE", s[0].substring(0,13)); + assertEquals("<14></table>", s[2].substring(0,12)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]