http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
On Jul 16, 2014, at 10:03 AM, Remko Popma <[email protected]> wrote: > Where do we document that we put the hostName in the context properties? That > is probably the place to mention that for Android the value will be "unknown". > > The JMX stuff will not work because Android doesn't support it. This is > expected, so there is not much to explain here. > > > On Wed, Jul 16, 2014 at 11:26 PM, Gary Gregory <[email protected]> wrote: > We need an Android section on the site explain what we know will not work and > what we disable... > > Gary > > > On Wed, Jul 16, 2014 at 10:25 AM, Matt Sicker <[email protected]> wrote: > I think it's rather technical why we get one exception or the other. The > VerifyError would happen during linkage, while the no class def would happen > during loading. The VerifyError was in a constructor. The other one might be > in a different location. You'd probably get an ExceptionInInitializationError > if it happened inside the static block for instance. > > > On 16 July 2014 09:18, Remko Popma <[email protected]> wrote: > Hm... Good point. I will remove the Environment class and put a try/catch > Throwable around the Server.reregisterMBeansAfterReconfigure invocation. > > > On Wed, Jul 16, 2014 at 11:02 PM, Gary Gregory <[email protected]> wrote: > Yeah, big mystery. I'm not sure we should have code like "if ! > isAndroid()..." It might be better to // comment and catch errors/exceptions > because who know how Android will change. > > Gary > > > On Wed, Jul 16, 2014 at 9:58 AM, Remko Popma <[email protected]> wrote: > But beats me why the JNDI stuff would throw a VerifyError and the JMX stuff > only a NoClassDefFoundError... > > > On Wed, Jul 16, 2014 at 10:49 PM, Remko Popma <[email protected]> wrote: > I did think about that but if you look at the stack trace it is able to load > the Server class, so I think we're okay: > > java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory > at > org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:118) > at > org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:369) > > > > On Wed, Jul 16, 2014 at 10:41 PM, Gary Gregory <[email protected]> wrote: > I do not think this is going to work. See my fix for the JNDI lookup loading. > > Because you have a hard reference in the LoggerContext class to our JMX > Server class, you still have a dependency on JMX. We need to refer to our JMX > Server class dynamically, using reflection for example. > > Gary > > > ---------- Forwarded message ---------- > From: <[email protected]> > Date: Wed, Jul 16, 2014 at 9:31 AM > Subject: svn commit: r1611003 - in /logging/log4j/log4j2/trunk: > log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java > src/changes/changes.xml > To: [email protected] > > > Author: rpopma > Date: Wed Jul 16 13:31:07 2014 > New Revision: 1611003 > > URL: http://svn.apache.org/r1611003 > Log: > LOG4J2-716: automatically disable log4j JMX when detecting we are running on > Android > > Added: > > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java > (with props) > Modified: > > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > logging/log4j/log4j2/trunk/src/changes/changes.xml > > Modified: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java?rev=1611003&r1=1611002&r2=1611003&view=diff > ============================================================================== > --- > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > (original) > +++ > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java > Wed Jul 16 13:31:07 2014 > @@ -41,6 +41,7 @@ import org.apache.logging.log4j.core.con > import org.apache.logging.log4j.core.config.Reconfigurable; > import org.apache.logging.log4j.core.jmx.Server; > import org.apache.logging.log4j.core.util.Assert; > +import org.apache.logging.log4j.core.util.Environment; > import org.apache.logging.log4j.core.util.NetUtils; > import org.apache.logging.log4j.message.MessageFactory; > import org.apache.logging.log4j.spi.AbstractLogger; > @@ -365,10 +366,12 @@ public class LoggerContext extends Abstr > > firePropertyChangeEvent(new PropertyChangeEvent(this, > PROPERTY_CONFIG, prev, config)); > > - try { > - Server.reregisterMBeansAfterReconfigure(); > - } catch (final Exception ex) { > - LOGGER.error("Could not reconfigure JMX", ex); > + if (!Environment.isAndroid()) { // LOG4J2-716: Android has no > java.lang.management > + try { > + Server.reregisterMBeansAfterReconfigure(); > + } catch (final Exception ex) { > + LOGGER.error("Could not reconfigure JMX", ex); > + } > } > return prev; > } > > Added: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java?rev=1611003&view=auto > ============================================================================== > --- > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java > (added) > +++ > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java > Wed Jul 16 13:31:07 2014 > @@ -0,0 +1,34 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > + > +package org.apache.logging.log4j.core.util; > + > +/** > + * Runtime environment-related utility methods. > + */ > +public final class Environment { > + private Environment() { > + } > + > + /** > + * Returns {@code true} if we are running on Android, {@code false} > otherwise > + * @return {@code true} if system property "java.specification.vendor" > contains "android" > + */ > + public static boolean isAndroid() { > + return System.getProperty("java.specification.vendor", > "x").toLowerCase().contains("android"); > + } > +} > > Propchange: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1611003&r1=1611002&r2=1611003&view=diff > ============================================================================== > --- logging/log4j/log4j2/trunk/src/changes/changes.xml (original) > +++ logging/log4j/log4j2/trunk/src/changes/changes.xml Wed Jul 16 13:31:07 > 2014 > @@ -22,6 +22,9 @@ > </properties> > <body> > <release version="?" date="2014-mm-dd" description="?"> > + <action issue="LOG4J2-716" dev="popmarem" type="fix"> > + Automatically disable log4j JMX when detecting we are running on > Android. > + </action> > <action issue="LOG4J2-657" dev="popmarem" type="fix" due-to="Stefan > Wehner"> > Fixed AbstractDatabaseManager to close connection on writeInternal > error. > </action> > > > > > > -- > E-Mail: [email protected] | [email protected] > Java Persistence with Hibernate, Second Edition > JUnit in Action, Second Edition > Spring Batch in Action > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > > > > > > -- > E-Mail: [email protected] | [email protected] > Java Persistence with Hibernate, Second Edition > JUnit in Action, Second Edition > Spring Batch in Action > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > > > > > -- > Matt Sicker <[email protected]> > > > > -- > E-Mail: [email protected] | [email protected] > Java Persistence with Hibernate, Second Edition > JUnit in Action, Second Edition > Spring Batch in Action > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory >
