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]

Reply via email to