66import java .util .Queue ;
77import java .util .concurrent .ConcurrentHashMap ;
88import java .util .concurrent .ConcurrentLinkedQueue ;
9+ import java .util .concurrent .LinkedBlockingQueue ;
910import java .util .logging .FileHandler ;
1011import java .util .logging .Filter ;
1112import java .util .logging .Formatter ;
1718
1819public class ExtendedFileHandler extends Handler {
1920
20- private Queue <LogRecord > toLogQueue = new ConcurrentLinkedQueue < LogRecord >() ;
21+ private Queue <LogRecord > toLogQueue ;
2122 private FileHandler commonFilehandler ;
2223 private Map <String , FileHandler > fileHandlers = new ConcurrentHashMap <String , FileHandler >();
2324 private Writter writter = null ;
@@ -27,6 +28,7 @@ public class ExtendedFileHandler extends Handler {
2728 private int count = 1 ;
2829 private boolean append = false ;;
2930 private boolean sysout = false ;
31+ private int max_queue_size ;
3032 private static final Object lock = new Object ();
3133
3234
@@ -162,6 +164,29 @@ private void configure() {
162164 }
163165 sysOut ("ExtendedFileHandler count " +count );
164166
167+ val = manager .getProperty (cname + ".max_queue_size" );
168+ if (val == null ) {
169+ max_queue_size = 0 ;
170+ } else {
171+ try {
172+ max_queue_size = Integer .parseInt (val .trim ());
173+ } catch (Exception ex ) {
174+ max_queue_size = 0 ;
175+ }
176+ }
177+
178+ if (max_queue_size < 0 ) {
179+ max_queue_size = 0 ;
180+ }
181+ sysOut ("ExtendedFileHandler max_queue_size " +max_queue_size );
182+
183+ if (max_queue_size == 0 ) {
184+ toLogQueue = new ConcurrentLinkedQueue <LogRecord >();
185+ } else {
186+ toLogQueue = new LinkedBlockingQueue <LogRecord >(max_queue_size );
187+ }
188+
189+
165190 val = manager .getProperty (cname + ".append" );
166191 if (val == null ) {
167192 append = false ;
@@ -230,6 +255,7 @@ public ExtendedFileHandler() throws IOException, SecurityException {
230255 private void startWritter () {
231256 writter = new Writter ("ExtendedFileHandler - async log writter" );
232257 writter .setDaemon (true );
258+ writter .setPriority (Thread .NORM_PRIORITY +1 );
233259 writter .start ();
234260 sysOut ("ExtendedFileHandler Writter started" );
235261 }
@@ -278,6 +304,17 @@ public ExtendedFileHandler(String pattern, long limit, int count, boolean append
278304 startWritter ();
279305 }
280306
307+ public ExtendedFileHandler (String pattern , long limit , int count , boolean append , int maxQueueSize ) {
308+ sysOut ("ExtendedFileHandler C6" );
309+ configure ();
310+ this .pattern = pattern ;
311+ this .limit = limit ;
312+ this .count = count ;
313+ this .append = append ;
314+ this .max_queue_size = maxQueueSize ;
315+ startWritter ();
316+ }
317+
281318// public ExtendedFileHandler(String pattern, long limit, int count, boolean append, boolean separateEachThread) {
282319// sysOut("ExtendedFileHandler C6");
283320// configure();
0 commit comments