import java.util.logging.*;
import java.util.concurrent.*;
public class ScheduledLogHandler {
private static final Logger logger = Logger.getLogger(ScheduledLogHandler.class.getName()); // Logger instance
private static final Handler handler = new StreamHandler(System.out); // Default handler - can be customized
private static final Level logLevel = Level.INFO; // Set the desired log level
public static void main(String[] args) {
try {
logger.setLevel(logLevel); // Set the logger level
handler.setFilter(new Filter()); // Apply a filter for failure handling
logger.addHandler(handler); // Add the handler to the logger
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); // Create a thread pool
// Example scheduled task
Runnable task = () -> {
try {
// Code that might fail
logger.info("Task started.");
int result = divide(10, 0); // Intentionally causing an error
logger.info("Task completed with result: " + result);
} catch (Exception e) {
// Handle the exception gracefully
logger.severe("Task failed: " + e.getMessage()); // Log the error
// Optionally, perform cleanup or retry logic here
}
};
executor.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS); // Run the task every 5 seconds
} catch (Exception e) {
logger.critical("Failed to initialize logger: " + e.getMessage()); // Log initialization errors
}
}
// Example function that might throw an exception
private static int divide(int a, int b) {
return a / b;
}
// Filter class to handle log entry failures
static class Filter extends FilterHandler {
@Override
public boolean shouldIgnore() {
// Return true to ignore log entries that cause exceptions
return true;
}
}
}
Add your comment