diff --git a/src/main/java/com/teragrep/jla_04/RelpConfig.java b/src/main/java/com/teragrep/jla_04/RelpConfig.java index 58a75cb..67cb2fe 100644 --- a/src/main/java/com/teragrep/jla_04/RelpConfig.java +++ b/src/main/java/com/teragrep/jla_04/RelpConfig.java @@ -74,6 +74,7 @@ private void initLogger() { try { inputStream = new FileInputStream(configpath); LogManager.getLogManager().readConfiguration(inputStream); + inputStream.close(); } catch (Exception e) { e.printStackTrace(); } @@ -83,15 +84,10 @@ private void initLogger() { private void initFormatter() throws ClassNotFoundException, InstantiationException, IllegalAccessException { // Get normal prop and fallback to manager prop; from that fallback to simple formatter String formatter_name = System.getProperty("java.util.logging.RelpHandler." + this.getName() + ".formatter", this.manager.getProperty("java.util.logging.RelpHandler." + this.getName() + ".formatter")); - if(formatter_name != null) { - ClassLoader classloader = ClassLoader.getSystemClassLoader(); - if (classloader == null) { - System.out.println("Unable to initialize ClassLoader.getSystemClassLoader(), defaulting to SimpleFormatter"); - } - if (classloader != null) { - Object formatter_object = classloader.loadClass(formatter_name).newInstance(); - this.formatter = (Formatter) formatter_object; - } + ClassLoader classloader = ClassLoader.getSystemClassLoader(); + if (classloader != null && formatter_name != null) { + Object formatter_object = classloader.loadClass(formatter_name).newInstance(); + this.formatter = (Formatter) formatter_object; } else { this.formatter = new SimpleFormatter() { diff --git a/src/main/java/com/teragrep/jla_04/RelpHandler.java b/src/main/java/com/teragrep/jla_04/RelpHandler.java index f46ba9e..f207037 100644 --- a/src/main/java/com/teragrep/jla_04/RelpHandler.java +++ b/src/main/java/com/teragrep/jla_04/RelpHandler.java @@ -36,7 +36,6 @@ public class RelpHandler extends Handler { private RelpBatch batch; private RelpConfig config; boolean connected = false; - Formatter formatter; // No arguments defaults to 'default' logger public RelpHandler() throws NumberFormatException, NoSuchFieldException, IOException, TimeoutException, ClassNotFoundException, InstantiationException, IllegalAccessException { @@ -53,7 +52,6 @@ public RelpHandler(String name) throws NumberFormatException, NoSuchFieldExcepti private void initialize(String name) throws NoSuchFieldException, IOException, TimeoutException, ClassNotFoundException, InstantiationException, IllegalAccessException { // All relevant onetime-setup configurations and their validations are in RelpConfig this.config = new RelpConfig(name); - initFormatter(name); // Connect this.relpConnection = new RelpConnection(); @@ -63,31 +61,6 @@ private void initialize(String name) throws NoSuchFieldException, IOException, T connect(); } - private void initFormatter(String name) throws ClassNotFoundException, InstantiationException, IllegalAccessException { - String formatter_value = System.getProperty("java.util.logging.RelpHandler." + name + ".formatter"); - ClassLoader classloader = ClassLoader.getSystemClassLoader(); - if(classloader == null) { - System.out.println("Unable to initialize ClassLoader.getSystemClassLoader(), defaulting to SimpleFormatter"); - } - if (classloader != null && formatter_value != null) { - Object formatter_object = classloader.loadClass(formatter_value).newInstance(); - this.formatter = (Formatter) formatter_object; - } - else { - this.formatter = new SimpleFormatter() { - @Override - public synchronized String format(LogRecord logrecord) { - return String.format("%1$s", logrecord.getMessage()); - } - }; - } - } - - @Override - public synchronized void setFormatter(Formatter formatter) { - this.formatter = formatter; - } - @Override public synchronized void publish(LogRecord logRecord) { // Discards logs with lower than configured logging level diff --git a/src/test/java/com/teragrep/jla_04/InputVerificationTest.java b/src/test/java/com/teragrep/jla_04/InputVerificationTest.java index 044c86e..709682e 100644 --- a/src/test/java/com/teragrep/jla_04/InputVerificationTest.java +++ b/src/test/java/com/teragrep/jla_04/InputVerificationTest.java @@ -19,6 +19,7 @@ import org.junit.jupiter.api.*; +import java.util.Properties; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -39,18 +40,24 @@ public void testHandler(RelpHandler handler, Boolean failure, String message) { public void testEmptyValues() { Assertions.assertThrows(IllegalArgumentException.class, () -> { // Empty address + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.emptyaddress.server.address", ""); System.setProperty("java.util.logging.RelpHandler.emptyaddress.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.emptyaddress.appname", "emptyaddress"); testHandler(new RelpHandler("emptyaddress"), true, "Empty address"); + System.getProperties().clear(); + System.setProperties(default_props); }); Assertions.assertThrows(IllegalArgumentException.class, () -> { // Empty appname + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.emptyappname.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.emptyappname.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.emptyappname.appname", ""); testHandler(new RelpHandler("emptyappname"), true, "Empty appname"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -59,23 +66,32 @@ public void testEmptyValues() { public void testMissingProperties() { Assertions.assertDoesNotThrow(() -> { // No address + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.missingaddress.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.missingaddress.appname", "missingaddress"); testHandler(new RelpHandler("missingaddress"), false, "Missing address"); + System.getProperties().clear(); + System.setProperties(default_props); }); Assertions.assertDoesNotThrow(() -> { // No port + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.missingport.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.missingport.appname", "missingport"); testHandler(new RelpHandler("missingport"), false, "Missing port"); + System.getProperties().clear(); + System.setProperties(default_props); }); Assertions.assertDoesNotThrow(() -> { // No appname + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.missingappname.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.missingappname.server.port", "1666"); testHandler(new RelpHandler("missingappname"), false, "Missing appname"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -84,18 +100,24 @@ public void testMissingProperties() { public void testInvalidPortRangeValues() { Assertions.assertThrows(IllegalArgumentException.class, () -> { // Port is too small + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.smallport.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.smallport.server.port", "-3"); System.setProperty("java.util.logging.RelpHandler.smallport.appname", "smallport"); testHandler(new RelpHandler("smallport"), true,"Small port"); + System.getProperties().clear(); + System.setProperties(default_props); }); Assertions.assertThrows(IllegalArgumentException.class, () -> { // Port is too big + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.bigport.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.bigport.server.port", "123456"); System.setProperty("java.util.logging.RelpHandler.bigport.appname", "bigport"); testHandler(new RelpHandler("bigport"), true,"Big port"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -104,10 +126,13 @@ public void testInvalidPortRangeValues() { public void testNonNumericPortValue() { Assertions.assertThrows(NumberFormatException.class, () -> { // Port is not numeric + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.invalidport.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.invalidport.server.port", "NotNumeric"); System.setProperty("java.util.logging.RelpHandler.invalidport.appname", "invalidport"); testHandler(new RelpHandler("invalidport"), true,"Invalid port"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -116,10 +141,13 @@ public void testNonNumericPortValue() { public void testEmptyLoggerName() { Assertions.assertThrows(IllegalArgumentException.class, () -> { // Logger name is empty + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.emptylogger.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.emptylogger.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.emptylogger.appname", "emptylogger"); testHandler(new RelpHandler(""), true,"Empty logger name"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -128,20 +156,26 @@ public void testEmptyLoggerName() { public void testInvalidReconnectInterval() { Assertions.assertThrows(IllegalArgumentException.class, () -> { // Interval is set but empty + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.intervalempty.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.intervalempty.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.intervalempty.appname", "intervalempty"); System.setProperty("java.util.logging.RelpHandler.intervalempty.server.reconnectInterval", ""); testHandler(new RelpHandler("intervalempty"), true,"Empty interval"); + System.getProperties().clear(); + System.setProperties(default_props); }); Assertions.assertThrows(IllegalArgumentException.class, () -> { // Interval is invalid + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.intervalinvalid.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.intervalinvalid.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.intervalinvalid.appname", "intervalinvalid"); System.setProperty("java.util.logging.RelpHandler.intervalinvalid.server.reconnectInterval", "-13"); testHandler(new RelpHandler("intervalinvalid"), true,"Invalid interval"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -150,11 +184,14 @@ public void testInvalidReconnectInterval() { public void testInvalidFormatterValue() { Assertions.assertThrows(java.lang.ClassNotFoundException.class, () -> { // Formatter is invalid + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.invalidformatter.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.invalidformatter.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.invalidformatter.appname", "invalidformatter"); System.setProperty("java.util.logging.RelpHandler.invalidformatter.formatter", "java.util.class.doesnt.exist"); testHandler(new RelpHandler("invalidformatter"), true,"Invalid Formatter"); + System.getProperties().clear(); + System.setProperties(default_props); }); } } diff --git a/src/test/java/com/teragrep/jla_04/PrebuiltTest.java b/src/test/java/com/teragrep/jla_04/PrebuiltTest.java index ca087e3..9d9ff26 100644 --- a/src/test/java/com/teragrep/jla_04/PrebuiltTest.java +++ b/src/test/java/com/teragrep/jla_04/PrebuiltTest.java @@ -25,6 +25,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.util.Properties; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -34,6 +35,7 @@ public class PrebuiltTest { @DisplayName("Tests all from properties") public void testFullyFromProperties() { Assertions.assertDoesNotThrow(() -> { + Properties default_props = (Properties) System.getProperties().clone(); LogManager.getLogManager().reset(); InputStream inputStream = null; try { @@ -47,8 +49,9 @@ public void testFullyFromProperties() { catch (IOException e) { System.out.println("Can't read conf/logging.properties: " + e.getMessage()); } - logger.info("I should be from fully.properties"); + System.getProperties().clear(); + System.setProperties(default_props); }); } } diff --git a/src/test/java/com/teragrep/jla_04/PropertiesFileTest.java b/src/test/java/com/teragrep/jla_04/PropertiesFileTest.java index 19a33e2..c845854 100644 --- a/src/test/java/com/teragrep/jla_04/PropertiesFileTest.java +++ b/src/test/java/com/teragrep/jla_04/PropertiesFileTest.java @@ -21,6 +21,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.util.Properties; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -31,11 +32,14 @@ public class PropertiesFileTest { @DisplayName("Tests reading properties file") public void testReadPropertiesFile() { Assertions.assertDoesNotThrow(() -> { + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.config.file", System.getProperty("user.dir") + "/src/test/java/com/teragrep/jla_04//logging.properties"); RelpHandler handler = new RelpHandler("fromprops"); LogManager.getLogManager().reset(); logger.addHandler(handler); logger.info("I am from properties file"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -44,12 +48,15 @@ public void testReadPropertiesFile() { @DisplayName("Tests reading properties file and overriding values") public void testOverridePropertiesFile() { Assertions.assertDoesNotThrow(() -> { + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.config.file", System.getProperty("user.dir") + "/src/test/java/com/teragrep/jla_04//logging.properties"); System.setProperty("java.util.logging.RelpHandler.fromprops-override.hostname", "fromprops-hostname-overridden"); RelpHandler handler = new RelpHandler("fromprops-override"); LogManager.getLogManager().reset(); logger.addHandler(handler); logger.info("I am from properties file but overridden"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -57,11 +64,14 @@ public void testOverridePropertiesFile() { @DisplayName("Tests reading properties file and getting formatter") public void testGettingFormatter() { Assertions.assertDoesNotThrow(() -> { + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.config.file", System.getProperty("user.dir") + "/src/test/java/com/teragrep/jla_04//logging.properties"); RelpHandler handler = new RelpHandler("fromprops-formatter"); LogManager.getLogManager().reset(); logger.addHandler(handler); logger.info("My formatter should be from logging.properties"); + System.getProperties().clear(); + System.setProperties(default_props); }); } } diff --git a/src/test/java/com/teragrep/jla_04/RelpHandlerTest.java b/src/test/java/com/teragrep/jla_04/RelpHandlerTest.java index 3e02716..ff131c8 100644 --- a/src/test/java/com/teragrep/jla_04/RelpHandlerTest.java +++ b/src/test/java/com/teragrep/jla_04/RelpHandlerTest.java @@ -18,6 +18,7 @@ package com.teragrep.jla_04; import java.util.Date; +import java.util.Properties; import java.util.logging.*; import org.junit.jupiter.api.*; @@ -30,6 +31,7 @@ public class RelpHandlerTest { public void testUsage() { Assertions.assertAll(() -> { // Custom logger name + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.custom.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.custom.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.custom.appname", "custom"); @@ -55,6 +57,8 @@ public void testUsage() { logger.severe("Severe message"); logger.warning("Warning message"); logger.info("Info message"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -63,6 +67,7 @@ public void testUsage() { public void testSD() { Assertions.assertAll(() -> { // We want to use structured data + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.withsd.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.withsd.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.withsd.appname", "withsd"); @@ -79,6 +84,8 @@ public void testSD() { // Set level and send messages logger.setLevel(Level.INFO); logger.info("With Structured Data"); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -87,6 +94,7 @@ public void testSD() { public void testSimpleFormatter() { Assertions.assertAll(() -> { // Formatter test + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.simpleformatter.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.simpleformatter.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.simpleformatter.appname", "formatterapp"); @@ -104,6 +112,8 @@ public void testSimpleFormatter() { // Set level and send messages logger.setLevel(Level.INFO); logger.info("Simpleformatter test."); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -112,6 +122,7 @@ public void testSimpleFormatter() { public void testCustomFormatter() { Assertions.assertAll(() -> { // Formatter test + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.formattertest.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.formattertest.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.formattertest.appname", "formatterapp"); @@ -138,6 +149,8 @@ public synchronized String format(LogRecord logrecord) { // Set level and send messages logger.setLevel(Level.INFO); logger.info("Simple programmatically set SimpleFormatter test."); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -146,6 +159,7 @@ public synchronized String format(LogRecord logrecord) { public void testSetFormatterProgrammatic() { Assertions.assertAll(() -> { // Formatter test + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.xmlformatter.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.xmlformatter.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.xmlformatter.appname", "formatterapp"); @@ -162,6 +176,8 @@ public void testSetFormatterProgrammatic() { // Set level and send messages logger.setLevel(Level.INFO); logger.info("XML formatter test."); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -170,6 +186,7 @@ public void testSetFormatterProgrammatic() { public void testSetFormatterFromProperties() { Assertions.assertAll(() -> { // Formatter test + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.xmlformatterprops.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.xmlformatterprops.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.xmlformatterprops.appname", "formatterapp"); @@ -186,6 +203,8 @@ public void testSetFormatterFromProperties() { // Set level and send messages logger.setLevel(Level.INFO); logger.info("XML formatter via properties test."); + System.getProperties().clear(); + System.setProperties(default_props); }); } @@ -195,6 +214,7 @@ public void testSetFormatterFromProperties() { public void testSetFormatterFormatFromProperties() { Assertions.assertAll(() -> { // Formatter test + Properties default_props = (Properties) System.getProperties().clone(); System.setProperty("java.util.logging.RelpHandler.simpleformatterformat.server.address", "127.0.0.1"); System.setProperty("java.util.logging.RelpHandler.simpleformatterformat.server.port", "1666"); System.setProperty("java.util.logging.RelpHandler.simpleformatterformat.appname", "formatterapp"); @@ -212,6 +232,8 @@ public void testSetFormatterFormatFromProperties() { // Set level and send messages logger.setLevel(Level.INFO); logger.info("Simple formatter format via properties test."); + System.getProperties().clear(); + System.setProperties(default_props); }); } -} \ No newline at end of file +}