diff --git a/src/main/java/oving6/logger/DistributingLogger.java b/src/main/java/oving6/logger/DistributingLogger.java new file mode 100644 index 0000000..04af969 --- /dev/null +++ b/src/main/java/oving6/logger/DistributingLogger.java @@ -0,0 +1,48 @@ +package oving6.logger; + +public class DistributingLogger implements ILogger { + ILogger errorLogger; + ILogger warningLogger; + ILogger infoLogger; + + DistributingLogger(ILogger errorLogger, ILogger warningLogger, ILogger infoLogger) { + this.errorLogger = errorLogger; + this.warningLogger = warningLogger; + this.infoLogger = infoLogger; + } + + void setLogger(String severity, ILogger logger) { + switch (severity) { + case "error": + errorLogger = logger; + break; + case "warning": + warningLogger = logger; + break; + case "info": + infoLogger = logger; + break; + default: + throw new IllegalArgumentException("Invalid severity level for logger"); + } + + } + + @Override + public void log(String severity, String message, Exception exception) { + switch (severity) { + case "error": + errorLogger.log(severity, message, exception); + break; + case "warning": + warningLogger.log(severity, message, exception); + break; + case "info": + infoLogger.log(severity, message, exception); + break; + default: + throw new IllegalArgumentException("Invalid severity level for logger"); + } + + } +} diff --git a/src/main/java/oving6/logger/FilteringLogger.java b/src/main/java/oving6/logger/FilteringLogger.java new file mode 100644 index 0000000..98cc274 --- /dev/null +++ b/src/main/java/oving6/logger/FilteringLogger.java @@ -0,0 +1,29 @@ +package oving6.logger; + +import java.util.HashMap; + +public class FilteringLogger { + private ILogger logger; + private HashMap logging = new HashMap(); + + FilteringLogger(ILogger logger, String... severities) { + this.logger = logger; + for (String severity : severities) { + logging.put(severity, true); + } + } + + boolean isLogging(String severity) { + return logging.getOrDefault(severity, false); + } + + void setIsLogging(String severity, boolean value) { + logging.put(severity, value); + } + + void log(String severity, String message, Exception exception) { + if (isLogging(severity)) { + logger.log(severity, message, exception); + } + } +} diff --git a/src/main/java/oving6/logger/ILogger.java b/src/main/java/oving6/logger/ILogger.java new file mode 100644 index 0000000..d822ec8 --- /dev/null +++ b/src/main/java/oving6/logger/ILogger.java @@ -0,0 +1,9 @@ +package oving6.logger; + +public interface ILogger { + String ERROR = "error"; + String WARNING = "warning"; + String INFO = "info"; + + void log(String severity, String message, Exception exception); +} diff --git a/src/main/java/oving6/logger/StreamLogger.java b/src/main/java/oving6/logger/StreamLogger.java new file mode 100644 index 0000000..34ccedf --- /dev/null +++ b/src/main/java/oving6/logger/StreamLogger.java @@ -0,0 +1,31 @@ +package oving6.logger; + +import java.io.OutputStream; + +public class StreamLogger implements ILogger { + private OutputStream stream; + private String formatString = "%s: %s (%s)"; + + StreamLogger(OutputStream stream) { + this.stream = stream; + } + + @Override + public void log(String severity, String message, Exception exception) { + try { + String logMessage = String.format(formatString, severity, message, exception) + "\n"; + stream.write(logMessage.getBytes()); + stream.flush(); + } catch (Exception e) { + System.out.println(e); + } + + } + + void setFormatString(String formatString) { + if (formatString == null) { + throw new IllegalArgumentException("formatString cannot be null"); + } + this.formatString = formatString; + } +} diff --git a/src/test/java/oving6/logger/DistributingLoggerTest.java.unimplemented b/src/test/java/oving6/logger/DistributingLoggerTest.java similarity index 100% rename from src/test/java/oving6/logger/DistributingLoggerTest.java.unimplemented rename to src/test/java/oving6/logger/DistributingLoggerTest.java diff --git a/src/test/java/oving6/logger/FilteringLoggerTest.java.unimplemented b/src/test/java/oving6/logger/FilteringLoggerTest.java similarity index 100% rename from src/test/java/oving6/logger/FilteringLoggerTest.java.unimplemented rename to src/test/java/oving6/logger/FilteringLoggerTest.java diff --git a/src/test/java/oving6/logger/StreamLoggerTest.java.unimplemented b/src/test/java/oving6/logger/StreamLoggerTest.java similarity index 100% rename from src/test/java/oving6/logger/StreamLoggerTest.java.unimplemented rename to src/test/java/oving6/logger/StreamLoggerTest.java