You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2013/08/07 16:54:05 UTC
svn commit: r1511342 - in /logging/log4j/log4j2/trunk:
api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
src/changes/changes.xml
Author: ggregory
Date: Wed Aug 7 14:54:04 2013
New Revision: 1511342
URL: http://svn.apache.org/r1511342
Log:
[LOG4J2-320] JPAAppender stops logging because META-INF/log4j-provider.properties is left open. Refactor loading and closing a properties stream into a new method PropertiesUtil#loadClose().
Modified:
logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified: logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java?rev=1511342&r1=1511341&r2=1511342&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java (original)
+++ logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java Wed Aug 7 14:54:04 2013
@@ -18,41 +18,61 @@ package org.apache.logging.log4j.util;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.util.Properties;
+import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
/**
- * Helps access System Properties.
+ * Helps access properties.
*/
public class PropertiesUtil {
private static final PropertiesUtil LOG4J_PROPERTIES = new PropertiesUtil("log4j2.component.properties");
+ private static final Logger LOGGER = StatusLogger.getLogger();
+
private final Properties props;
public PropertiesUtil(final Properties props) {
this.props = props;
}
- public PropertiesUtil(final String propsLocn) {
- this.props = new Properties();
- final ClassLoader loader = ProviderUtil.findClassLoader();
- final InputStream in = loader.getResourceAsStream(propsLocn);
- if (null != in) {
- try {
- this.props.load(in);
- } catch (final IOException e) {
- // ignored
- } finally {
- try {
- in.close();
- } catch (final IOException e) {
- // ignored
- }
- }
- }
- }
+ /**
+ * Loads and closes the given property input stream.
+ * If an error occurs, log to the status logger.
+ *
+ * @param in
+ * a property input stream.
+ * @param source
+ * a source object describing the source, like a resource string
+ * or a URL.
+ * @return a new Properties object
+ */
+ static Properties loadClose(InputStream in, Object source) {
+ Properties props = new Properties();
+ if (null != in) {
+ try {
+ props.load(in);
+ } catch (final IOException e) {
+ LOGGER.error("Unable to read " + source, e);
+ } finally {
+ try {
+ in.close();
+ } catch (final IOException e) {
+ LOGGER.error("Unable to close " + source, e);
+ }
+ }
+ }
+ return props;
+ }
+
+ public PropertiesUtil(final String propsLocn) {
+ final ClassLoader loader = ProviderUtil.findClassLoader();
+ final InputStream in = loader.getResourceAsStream(propsLocn);
+ this.props = loadClose(in, propsLocn);
+ }
public static PropertiesUtil getProperties() {
return LOG4J_PROPERTIES;
Modified: logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java?rev=1511342&r1=1511341&r2=1511342&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java (original)
+++ logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java Wed Aug 7 14:54:04 2013
@@ -58,17 +58,17 @@ public final class ProviderUtil {
if (enumResources != null) {
while (enumResources.hasMoreElements()) {
- final Properties props = new Properties();
final URL url = enumResources.nextElement();
+ Properties props;
try {
- props.load(url.openStream());
+ props = PropertiesUtil.loadClose(url.openStream(), url);
+ if (!validVersion(props.getProperty(API_VERSION))) {
+ continue;
+ }
+ PROVIDERS.add(new Provider(props, url));
} catch (final IOException ioe) {
- LOGGER.error("Unable to read " + url.toString(), ioe);
- }
- if (!validVersion(props.getProperty(API_VERSION))) {
- continue;
+ LOGGER.error("Unable to open " + url.toString(), ioe);
}
- PROVIDERS.add(new Provider(props, url));
}
}
}
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1511342&r1=1511341&r2=1511342&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Wed Aug 7 14:54:04 2013
@@ -21,6 +21,9 @@
</properties>
<body>
<release version="2.0-beta9" date="soon, very soon" description="Bug fixes and enhancements">
+ <action issue="LOG4J2-320" dev="ggregory" type="fix">
+ JPAAppender stops logging because META-INF/log4j-provider.properties is left open.
+ </action>
<action issue="LOG4J2-335" dev="rgoers" type="fix">
FlumePersistentManager's writer thread had high CPU usage.
</action>