Index: tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
===================================================================
--- tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java (revision 1339622)
+++ tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java (working copy)
@@ -67,6 +67,7 @@
assertEquals(false, appender.getFacilityPrinting());
assertNull(appender.getLayout());
assertNull(appender.getSyslogHost());
+ assertNull(appender.getTag());
assertTrue(appender.requiresLayout());
}
@@ -80,6 +81,7 @@
assertEquals(false, appender.getFacilityPrinting());
assertEquals(layout, appender.getLayout());
assertNull(appender.getSyslogHost());
+ assertNull(appender.getTag());
assertTrue(appender.requiresLayout());
}
@@ -93,6 +95,7 @@
assertEquals(false, appender.getFacilityPrinting());
assertEquals(layout, appender.getLayout());
assertNull(appender.getSyslogHost());
+ assertNull(appender.getTag());
assertTrue(appender.requiresLayout());
}
@@ -107,6 +110,7 @@
assertEquals(false, appender.getFacilityPrinting());
assertEquals(layout, appender.getLayout());
assertEquals("syslog.example.org", appender.getSyslogHost());
+ assertNull(appender.getTag());
assertTrue(appender.requiresLayout());
}
@@ -393,8 +397,27 @@
appender.setSyslogHost("127.0.0.1:1514");
}
+ /**
+ * Tests SyslogAppender with setTag.
+ */
+ public void testTag() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setTag("testtag");
+ assertEquals("testtag", appender.getTag());
+ }
+
+ /**
+ * Tests SyslogAppender with null tag.
+ */
+ public void testNullTag() {
+ SyslogAppender appender = new SyslogAppender();
+ appender.setTag(null);
+ assertNull(appender.getTag());
+ }
+
private static String[] log(final boolean header,
final String msg,
+ final String tag,
final Exception ex,
final int packets) throws Exception {
DatagramSocket ds = new DatagramSocket();
@@ -404,6 +427,7 @@
appender.setSyslogHost("localhost:" + ds.getLocalPort());
appender.setName("name");
appender.setHeader(header);
+ appender.setTag(tag);
PatternLayout pl = new PatternLayout("%m");
appender.setLayout(pl);
appender.activateOptions();
@@ -428,7 +452,7 @@
}
public void testActualLogging() throws Exception {
- String s = log(false, "greetings", null, 1)[0];
+ String s = log(false, "greetings", null, null, 1)[0];
StringTokenizer st = new StringTokenizer(s, "<>() ");
assertEquals("14", st.nextToken());
assertEquals("greetings", st.nextToken());
@@ -463,7 +487,7 @@
* @throws Exception on IOException.
*/
public void testBadTabbing() throws Exception {
- String[] s = log(false, "greetings", new MishandledException(), 6);
+ String[] s = log(false, "greetings", null, new MishandledException(), 6);
StringTokenizer st = new StringTokenizer(s[0], "<>() ");
assertEquals("11", st.nextToken());
assertEquals("greetings", st.nextToken());
@@ -481,7 +505,7 @@
*/
public void testHeaderLogging() throws Exception {
Date preDate = new Date();
- String s = log(true, "greetings", null, 1)[0];
+ String s = log(true, "greetings", null, null, 1)[0];
Date postDate = new Date();
assertEquals("<14>", s.substring(0, 4));
@@ -515,6 +539,51 @@
/**
+ * Tests presence of tag if set
+ */
+ public void testHeaderTagLogging() throws Exception {
+ String s = log(true, "greetings", "testtag", null, 1)[0];
+ assertEquals("<14>", s.substring(0, 4));
+
+ StringTokenizer st = new StringTokenizer(s.substring(21), " ");
+
+ // Throw away the hostname
+ st.nextToken();
+
+ assertEquals("testtag:", st.nextToken());
+ }
+
+ /**
+ * Tests presence of tag on every line of the exception
+ */
+ public void testHeaderTagExceptionLogging() throws Exception {
+ String[] s = log(true, "greetings", "testtag", new Exception(), 6);
+ for(int i=0; i < s.length; i++) {
+ System.err.println(s[i]);
+ assertEquals("<11>", s[i].substring(0, 4));
+ StringTokenizer st = new StringTokenizer(s[i].substring(21), " ");
+ // Throw away the hostname
+ st.nextToken();
+ assertEquals("testtag:", st.nextToken());
+ }
+ }
+
+ /**
+ * Tests absesence of tag if set to null
+ */
+ public void testHeaderNullTagLogging() throws Exception {
+ String s = log(true, "greetings", null, null, 1)[0];
+ assertEquals("<14>", s.substring(0, 4));
+
+ StringTokenizer st = new StringTokenizer(s.substring(21), " ");
+
+ // Throw away the hostname
+ st.nextToken();
+
+ assertEquals("greetings", st.nextToken());
+ }
+
+ /**
* Tests that any header or footer in layout is sent.
* @throws Exception if exception during test.
*/
Index: src/main/java/org/apache/log4j/net/SyslogAppender.java
===================================================================
--- src/main/java/org/apache/log4j/net/SyslogAppender.java (revision 1339622)
+++ src/main/java/org/apache/log4j/net/SyslogAppender.java (working copy)
@@ -109,6 +109,11 @@
*/
private boolean header = false;
/**
+ * The tag part of the syslog message
+ * @since 1.2.18
+ */
+ private String tag = null;
+ /**
* Date format used if header = true.
* @since 1.2.15
*/
@@ -476,6 +481,31 @@
header = val;
}
+ /**
+ * If the Tag option is set to a non-null string, the printed HEADER
+ * will include the specified tag followed by a colon. If set to null, then no
+ * tag is printed. It is null by default.
+ *
+ * @param tag the TAG to be printed out with the header
+ * @see #getTag()
+ * @since 1.2.18
+ */
+ public void setTag(final String tag) {
+ this.tag = tag;
+ }
+
+ /**
+ * Returns the TAG to be printed with the HEADER portion of the log message.
+ * This will return null if no TAG is to be printed.
+ *
+ * @return the TAG
+ * @see #setTag(String)
+ * @since 1.2.18
+ */
+ public String getTag() {
+ return this.tag;
+ }
+
/**
* Get the host name used to identify this appender.
* @return local host name
@@ -508,6 +538,10 @@
}
buf.append(getLocalHostname());
buf.append(' ');
+ if(this.tag != null) {
+ buf.append(this.tag);
+ buf.append(": ");
+ }
return buf.toString();
}
return "";