Writing Log Records Only After a Condition Occurs

Suppose you are trying to track down an infrequent bug on a production system with copious amounts of debug log messages. In most cases, when the bug occurs, it is not necessary to have the entire history of log messages; only a recent few are needed. To minimize the impact on the system, a MemoryHandler can be used to store a number of log records in memory and then dump them out only if the bug or other condition occurs.
try { // Create a memory handler with a memory of 100 records // and dumps the records into the file my.log when a // SEVERE message is logged FileHandler fhandler = new FileHandler("my.log"); int numRec = 100; MemoryHandler mhandler = new MemoryHandler(fhandler, numRec, Level.SEVERE); // Add to the desired logger Logger logger = Logger.getLogger("com.mycompany"); logger.addHandler(mhandler); } catch (IOException e) { } try { // Create a memory handler with a memory of 100 records // and dumps the records into the file my.log when a // some abitrary condition occurs FileHandler fhandler = new FileHandler("my.log"); int numRec = 100; MemoryHandler mhandler = new MemoryHandler(fhandler, numRec, Level.OFF) { public synchronized void publish(LogRecord record) { // Log it before checking the condition super.publish(record); boolean condition = false; if (condition) { // Condition occurred so dump buffered records push(); } } }; // Add to the desired logger Logger logger = Logger.getLogger("com.mycompany"); logger.addHandler(mhandler); } catch (IOException e) { }

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.