What was the reason for pulling it out of UUIDUtil in the first place? Is it going to be used somewhere else?
Ralph On Sep 18, 2014, at 7:08 PM, Remko Popma <[email protected]> wrote: > If you anticipate using it in more places in this package, otherwise my > preference would be to make it private, and increase the visibility when a > new use case comes up. > > Sent from my iPhone > > On 2014/09/19, at 10:51, Matt Sicker <[email protected]> wrote: > >> Package-private perhaps? >> >> On 18 September 2014 20:01, Remko Popma <[email protected]> wrote: >> On an enterprise machine it is not uncommon to have multiple network >> interface cards. When used internally in UUID, it is okay to ignore that >> scenario, and it's also more convenient to return localhost rather than null >> if there is no network card at all. >> >> If we make this logic public, we cannot make the same assumptions any more. >> Shouldn't we return some sort of iterator or collection of MacAddresses? Or >> call it getFirstMacAddress? The Javadoc says null is returned if there's no >> NIC, but I don't see that in the code. (Do you anticipate using this method >> for something other than UUID? It might be better to leave it private...) >> >> Just my 2c. >> Remko >> >> Sent from my iPhone >> >> > On 2014/09/19, at 9:05, [email protected] wrote: >> > >> > Repository: logging-log4j2 >> > Updated Branches: >> > refs/heads/master 6b80804dc -> 2a754e12b >> > >> > >> > Refactor MAC address getter to own method. >> > >> > >> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >> > Commit: >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2a754e12 >> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2a754e12 >> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2a754e12 >> > >> > Branch: refs/heads/master >> > Commit: 2a754e12b28df03dab38d5e66db251094a9834a9 >> > Parents: 6b80804 >> > Author: Matt Sicker <[email protected]> >> > Authored: Thu Sep 18 19:04:56 2014 -0500 >> > Committer: Matt Sicker <[email protected]> >> > Committed: Thu Sep 18 19:04:56 2014 -0500 >> > >> > ---------------------------------------------------------------------- >> > .../logging/log4j/core/util/NetUtils.java | 40 ++++++++++++++++++++ >> > .../logging/log4j/core/util/UuidUtil.java | 40 +------------------- >> > 2 files changed, 41 insertions(+), 39 deletions(-) >> > ---------------------------------------------------------------------- >> > >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2a754e12/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java >> > ---------------------------------------------------------------------- >> > diff --git >> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java >> > >> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java >> > index 2609fef..46e16ce 100644 >> > --- >> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java >> > +++ >> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java >> > @@ -70,4 +70,44 @@ public final class NetUtils { >> > return "UNKNOWN_LOCALHOST"; >> > } >> > } >> > + >> > + /** >> > + * Returns the local network interface's MAC address if possible. The >> > local network interface is defined here as >> > + * the {@link NetworkInterface} that is both up and not a loopback >> > interface. >> > + * >> > + * @return the MAC address of the local network interface or {@code >> > null} if no MAC address could be determined. >> > + * @since 2.1 >> > + */ >> > + public static byte[] getLocalMacAddress() { >> > + byte[] mac = null; >> > + try { >> > + final InetAddress localHost = InetAddress.getLocalHost(); >> > + try { >> > + final NetworkInterface localInterface = >> > NetworkInterface.getByInetAddress(localHost); >> > + if (isUpAndNotLoopback(localInterface)) { >> > + mac = localInterface.getHardwareAddress(); >> > + } >> > + if (mac == null) { >> > + final Enumeration<NetworkInterface> networkInterfaces >> > = NetworkInterface.getNetworkInterfaces(); >> > + while (networkInterfaces.hasMoreElements() && mac == >> > null) { >> > + final NetworkInterface nic = >> > networkInterfaces.nextElement(); >> > + if (isUpAndNotLoopback(nic)) { >> > + mac = nic.getHardwareAddress(); >> > + } >> > + } >> > + } >> > + } catch (final SocketException e) { >> > + LOGGER.catching(e); >> > + } >> > + if (mac == null || mac.length == 0) { >> > + mac = localHost.getAddress(); >> > + } >> > + } catch (final UnknownHostException ignored) { >> > + } >> > + return mac; >> > + } >> > + >> > + private static boolean isUpAndNotLoopback(final NetworkInterface ni) >> > throws SocketException { >> > + return ni != null && !ni.isLoopback() && ni.isUp(); >> > + } >> > } >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2a754e12/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java >> > ---------------------------------------------------------------------- >> > diff --git >> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java >> > >> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java >> > index 34b021f..9bed752 100644 >> > --- >> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java >> > +++ >> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java >> > @@ -16,13 +16,8 @@ >> > */ >> > package org.apache.logging.log4j.core.util; >> > >> > -import java.lang.reflect.Method; >> > -import java.net.InetAddress; >> > -import java.net.NetworkInterface; >> > -import java.net.UnknownHostException; >> > import java.nio.ByteBuffer; >> > import java.security.SecureRandom; >> > -import java.util.Enumeration; >> > import java.util.Random; >> > import java.util.UUID; >> > import java.util.concurrent.atomic.AtomicInteger; >> > @@ -65,40 +60,7 @@ public final class UuidUtil { >> > private static final int HUNDRED_NANOS_PER_MILLI = 10000; >> > >> > static { >> > - byte[] mac = null; >> > - try { >> > - final InetAddress address = InetAddress.getLocalHost(); >> > - try { >> > - NetworkInterface ni = >> > NetworkInterface.getByInetAddress(address); >> > - if (ni != null && !ni.isLoopback() && ni.isUp()) { >> > - final Method method = >> > ni.getClass().getMethod("getHardwareAddress"); >> > - if (method != null) { >> > - mac = (byte[]) method.invoke(ni); >> > - } >> > - } >> > - >> > - if (mac == null) { >> > - final Enumeration<NetworkInterface> enumeration = >> > NetworkInterface.getNetworkInterfaces(); >> > - while (enumeration.hasMoreElements() && mac == null) { >> > - ni = enumeration.nextElement(); >> > - if (ni != null && ni.isUp() && !ni.isLoopback()) { >> > - final Method method = >> > ni.getClass().getMethod("getHardwareAddress"); >> > - if (method != null) { >> > - mac = (byte[]) method.invoke(ni); >> > - } >> > - } >> > - } >> > - } >> > - } catch (final Exception ex) { >> > - ex.printStackTrace(); >> > - // Ignore exception >> > - } >> > - if (mac == null || mac.length == 0) { >> > - mac = address.getAddress(); >> > - } >> > - } catch (final UnknownHostException e) { >> > - // Ignore exception >> > - } >> > + byte[] mac = NetUtils.getLocalMacAddress(); >> > final Random randomGenerator = new SecureRandom(); >> > if (mac == null || mac.length == 0) { >> > mac = new byte[6]; >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> >> >> >> -- >> Matt Sicker <[email protected]>
