1 package com.protomatter.syslog; 2 3 52 53 import java.io.*; 54 import java.util.*; 55 import java.text.*; 56 57 78 public class SyslogWriter 79 extends Writer 80 { 81 private Object logger = null; 82 private Object channel = null; 83 private int level = Syslog.INFO; 84 85 private int maxLength = 60; 86 87 private boolean closed = false; 88 89 private StringBuffer data = null; 90 private String lineSep = null; 91 private int lineSepLength = 0; 92 93 private final void checkClosed() 94 { 95 if (closed) 96 throw new IllegalStateException (MessageFormat.format( 97 Syslog.getResourceString(MessageConstants.SYSLOGWRITER_IS_CLOSED_MESSAGE), 98 new Object [] { "SyslogWriter" })); 99 } 100 101 109 public SyslogWriter(Object logger, int level) 110 { 111 this(logger, null, level); 112 } 113 114 124 public SyslogWriter(Object logger, Object channel, int level) 125 { 126 this.logger = logger; 127 this.channel = channel; 128 this.level = level; 129 this.lineSep = System.getProperty("line.separator"); 130 this.lineSepLength = this.lineSep.length(); 131 } 132 133 136 public void close() 137 { 138 this.closed = true; 139 } 140 141 148 public void flush() 149 { 150 checkClosed(); 151 synchronized (lock) 152 { 153 if (data != null) 154 { 155 if (data.length() > maxLength) 156 { 157 StringBuffer msg = new StringBuffer (maxLength + 3); 158 String s = data.toString(); 159 160 int index = s.indexOf(lineSep); 164 if ((index != -1) && (index < maxLength)) 165 msg.append(s.substring(0, index)); 166 else 167 msg.append(s.substring(0, maxLength)); 168 msg.append("..."); 169 170 if (channel == null) 171 Syslog.log(logger, msg, s, level); 172 else 173 Syslog.log(logger, channel, msg, s, level); 174 } 175 else 176 { 177 String msg = data.toString(); 178 if (msg.endsWith(lineSep)) 179 msg = msg.substring(0, msg.length() - lineSepLength); 180 else if (channel == null) 181 Syslog.log(logger, msg, null, level); 182 else 183 Syslog.log(logger, channel, msg, null, level); 184 } 185 this.data = null; 186 } 187 } 188 } 189 190 193 public void write(char buf[], int offset, int length) 194 { 195 checkClosed(); 196 synchronized (lock) 197 { 198 if (data == null) 199 data = new StringBuffer (); 200 data.append(buf, offset, length); 201 } 202 } 203 } 204 | Popular Tags |