logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Remko Popma <remko.po...@gmail.com>
Subject Re: svn commit: r1611991 - /logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
Date Sun, 20 Jul 2014 02:21:49 GMT
Ah, I did not see that ProviderUtil was already in log4j-api. My mistake,
please ignore my message.


On Sun, Jul 20, 2014 at 11:18 AM, Matt Sicker <boards@gmail.com> wrote:

> Well, this is a pretty trivial utility class that extracts the
> ProviderUtil.findClassLoader() method into a more appropriately named
> method. Also, it does proper security checks. :)
>
>
> On 19 July 2014 21:02, Remko Popma <remko.popma@gmail.com> wrote:
>
>> Matt,
>> Does this have to be in log4j-api?
>> Can we keep this in core until we are sure this is the way to go, and
>> _then_ consider moving this class to api?
>> The thing is, adding to log4j-api is easy, but taking it out might break
>> other people's code (even if it turned out it did not work well for us)...
>>
>>
>> On Sun, Jul 20, 2014 at 10:44 AM, <mattsicker@apache.org> wrote:
>>
>>> Author: mattsicker
>>> Date: Sun Jul 20 01:44:45 2014
>>> New Revision: 1611991
>>>
>>> URL: http://svn.apache.org/r1611991
>>> Log:
>>> Add LoaderUtil class to isolate ClassLoader utility class.
>>>
>>>   - Code based on the Loader class in log4j-core.
>>>   - Provides the functionality from ProviderUtil.findClassLoader()
>>> (which will delegate to this class in an upcoming revision).
>>>
>>> Added:
>>>
>>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
>>>
>>> Added:
>>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
>>> URL:
>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java?rev=1611991&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
>>> (added)
>>> +++
>>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
>>> Sun Jul 20 01:44:45 2014
>>> @@ -0,0 +1,52 @@
>>> +/*
>>> + * 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.util;
>>> +
>>> +import java.security.AccessController;
>>> +import java.security.PrivilegedAction;
>>> +
>>> +/**
>>> + * Utility class for ClassLoaders. Consider this class private.
>>> + */
>>> +// TODO: migrate any other useful methods from Loader in log4j-core
>>> +public final class LoaderUtil {
>>> +    private LoaderUtil() {}
>>> +
>>> +    private static final PrivilegedAction<ClassLoader> TCCL_GETTER =
>>> new ThreadContextClassLoaderGetter();
>>> +
>>> +    static {
>>> +        final SecurityManager sm = System.getSecurityManager();
>>> +        if (sm != null) {
>>> +            sm.checkPermission(new RuntimePermission("getClassLoader"));
>>> +        }
>>> +    }
>>> +
>>> +    public static ClassLoader getThreadContextClassLoader() {
>>> +        return System.getSecurityManager() == null
>>> +            ? TCCL_GETTER.run()
>>> +            : AccessController.doPrivileged(TCCL_GETTER);
>>> +    }
>>> +
>>> +    private static class ThreadContextClassLoaderGetter implements
>>> PrivilegedAction<ClassLoader> {
>>> +        @Override
>>> +        public ClassLoader run() {
>>> +            final ClassLoader cl =
>>> Thread.currentThread().getContextClassLoader();
>>> +            // if the TCCL is null, that means we're using the system CL
>>> +            return cl == null ? ClassLoader.getSystemClassLoader() : cl;
>>> +        }
>>> +    }
>>> +}
>>>
>>>
>>>
>>
>
>
> --
> Matt Sicker <boards@gmail.com>
>

Mime
View raw message