r500749 | eross | 2007-01-28 01:16:14 -0600 (Sun, 28 Jan 2007) | 1 line
Bug 40161 - Add Layout footer/header to Syslog output
Index: src/java/org/apache/log4j/helpers/SyslogWriter.java
===================================================================
41c41
< static final int SYSLOG_PORT = 514;
---
> private static final int SYSLOG_PORT = 514;
47c47
< StringBuffer buf = new StringBuffer();
---
> private StringBuffer buf = new StringBuffer();
114a115,117
> /**
> * Sends the pending data.
> */
116c119,122
< logger.debug("Writing out [{}]", buf);
---
> if (buf.length() == 0)
> return;
> // logging here can be problematic during shutdown when
writing the footer
> // logger.debug("Writing out [{}]", buf);
121d126
< if (this.ds != null && this.address != null) {
123c128
< }
---
>
131a137,141
> try {
> flush();
> } catch (IOException e) {
> // should throw it ... can't change method sig. though
> }
Index: src/java/org/apache/log4j/net/SyslogAppender.java
===================================================================
19d18
< import org.apache.log4j.AppenderSkeleton;
20a20,21
> import org.apache.log4j.Level;
> import org.apache.log4j.WriterAppender;
49c50
< public class SyslogAppender extends AppenderSkeleton {
---
> public class SyslogAppender extends WriterAppender {
128,129d128
< private SyslogWriter sw;
<
134,135d132
< private Layout layout;
<
137d133
< super(false);
142d137
< super(false);
159,168d153
< * Release resources held by this SyslogAppender,
< * including the datagram socket.
< * @since 0.8.4
< */
< public synchronized void close() {
< closed = true;
< sw.close();
< }
<
< /**
265c250,251
< sw = new SyslogWriter(syslogHost);
---
> SyslogWriter sw = new SyslogWriter(syslogHost);
> setWriter(sw);
339c325
< sw.write(timestamp.toString());
---
> qw.write(timestamp.toString());
344,346c330,332
< sw.write("<");
< sw.write(String.valueOf(pri));
< sw.write(">");
---
> qw.write("<");
> qw.write(String.valueOf(pri));
> qw.write(">");
348,356c334,336
< sw.write(' ');
< sw.write(localHostname);
< sw.write(' ');
< }
<
< public void append(LoggingEvent event) {
< // We must not attempt to append if sw is null.
< if (sw == null) {
< return;
---
> qw.write(' ');
> qw.write(localHostname);
> qw.write(' ');
358a339
> protected void subAppend(LoggingEvent event) {
362,363c343,344
< sw.write(msg);
< sw.flush();
---
> qw.write(msg);
> qw.flush();
382,387d362
< public Layout getLayout() {
< return layout;
< }
< public void setLayout(Layout layout) {
< this.layout = layout;
< }
410a386,414
> /**
> * Logs a footer/header as info.
> */
> private void info(String msg) {
> if (msg == null)
> return;
> LoggingEvent event = new LoggingEvent();
> event.setLevel(Level.INFO);
> try {
> writeInitialParts(event);
> } catch (IOException e) {
> }
> qw.write(msg);
> qw.flush();
> }
>
> protected void writeFooter() {
> if (layout != null) {
> info(layout.getFooter());
> }
> }
>
> protected void writeHeader() {
> if (layout != null) {
> info(layout.getHeader());
> }
> }
>
>
Index: tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
===================================================================
43a44,47
>
> DatagramSocket ds;
> DatagramPacket p = new DatagramPacket(new byte[1000], 0, 1000);
>
51a56,60
> protected void setUp() throws Exception {
> ds = new DatagramSocket();
> ds.setSoTimeout(2000);
> }
>
55c64,65
< public void tearDown() {
---
> protected void tearDown() {
> ds.close();
406,408c416,420
< public void testActualLogging() throws IOException {
< DatagramSocket ds = new DatagramSocket();
< ds.setSoTimeout(10);
---
> private String toString(DatagramPacket p){
> return new String(p.getData(), 0, p.getLength());
> }
>
> public void testActualLogging() throws Exception {
412c424,426
< appender.setLayout(new PatternLayout("%l %m"));
---
> PatternLayout pl = new PatternLayout("%m");
> pl.setFooter("EOF");
> appender.setLayout(pl);
418d431
< DatagramPacket p = new DatagramPacket(new byte[1000], 0, 1000);
420c433
< String s = new String(p.getData(), 0, p.getLength());
---
> String s = toString(p);
427,428d439
< assertEquals(getClass().getName() + ".testActualLogging",
st.nextToken());
< st.nextToken(); // this filename:line number
430c441,460
< ds.close();
---
> }
>
> public void testLoggingHeaderFooter() throws Exception {
> SyslogAppender appender = new SyslogAppender();
> appender.setSyslogHost("localhost:" + ds.getLocalPort());
> appender.setName("name");
>
> PatternLayout pl = new PatternLayout("%m");
> pl.setHeader("HI");
> pl.setFooter("BYE");
> appender.setLayout(pl);
> appender.activateOptions();
> ds.receive(p);
> String s = toString(p);
> assertEquals(true, s.endsWith("HI"));
>
> appender.close();
> ds.receive(p);
> s = toString(p);
> assertEquals(true, s.endsWith("BYE"));
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]