import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
class LogStream {
private List<String> logs; // Store log messages
private int maxLogs; // Maximum number of logs to store
private AtomicInteger logCounter = new AtomicInteger(0); // Atomic counter for unique log IDs
public LogStream(int maxLogs) {
this.logs = new ArrayList<>();
this.maxLogs = maxLogs;
}
public synchronized void log(String message) { // Synchronized for thread safety
logCounter.incrementAndGet();
String logId = "log-" + logCounter.get(); // Generate a unique ID
logs.add(logId + ": " + message); // Add log message with ID
if (logs.size() > maxLogs) {
logs.remove(0); // Remove the oldest log message if limit is reached
}
}
public List<String> getLogs() {
return new ArrayList<>(logs); // Return a copy to prevent external modification
}
public static void main(String[] args) {
// Example usage
LogStream logStream = new LogStream(5); // Limit to 5 logs
logStream.log("This is log message 1.");
logStream.log("This is log message 2.");
logStream.log("This is log message 3.");
logStream.log("This is log message 4.");
logStream.log("This is log message 5.");
logStream.log("This is log message 6."); // Will replace the oldest log
System.out.println(logStream.getLogs());
}
}
Add your comment