1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache license, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the license for the specific language governing permissions and
15 * limitations under the license.
16 */
17 package org.apache.logging.log4j.spring.boot;
18
19 import java.util.concurrent.locks.Lock;
20 import java.util.concurrent.locks.ReentrantLock;
21
22 import org.apache.logging.log4j.LogManager;
23 import org.apache.logging.log4j.internal.LogManagerStatus;
24 import org.springframework.core.env.Environment;
25
26 /**
27 * Provides access to the Spring Environment.
28 */
29 public class SpringEnvironmentHolder {
30
31 private volatile Environment environment;
32 private Lock lock = new ReentrantLock();
33
34
35 protected Environment getEnvironment() {
36 if (environment == null && LogManagerStatus.isInitialized() && LogManager.getFactory() != null &&
37 LogManager.getFactory().hasContext(SpringEnvironmentHolder.class.getName(), null, false)) {
38 lock.lock();
39 try {
40 if (environment == null) {
41 Object obj = LogManager.getContext(false).getObject(Log4j2CloudConfigLoggingSystem.ENVIRONMENT_KEY);
42 environment = obj instanceof Environment ? (Environment) obj : null;
43 }
44 } finally {
45 lock.unlock();
46 }
47 }
48 return environment;
49 }
50 }