1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.lookup;
18
19 import javax.naming.NamingException;
20
21 import org.apache.logging.log4j.Logger;
22 import org.apache.logging.log4j.Marker;
23 import org.apache.logging.log4j.MarkerManager;
24 import org.apache.logging.log4j.core.LogEvent;
25 import org.apache.logging.log4j.core.config.plugins.Plugin;
26 import org.apache.logging.log4j.core.net.JndiManager;
27 import org.apache.logging.log4j.status.StatusLogger;
28
29
30
31
32 @Plugin(name = "jndi", category = StrLookup.CATEGORY)
33 public class JndiLookup extends AbstractLookup {
34
35 private static final Logger LOGGER = StatusLogger.getLogger();
36 private static final Marker LOOKUP = MarkerManager.getMarker("LOOKUP");
37
38
39 static final String CONTAINER_JNDI_RESOURCE_PATH_PREFIX = "java:comp/env/";
40
41
42
43
44
45
46
47 @Override
48 public String lookup(final LogEvent event, final String key) {
49 if (key == null) {
50 return null;
51 }
52 final String jndiName = convertJndiName(key);
53 final JndiManager jndiManager = JndiManager.getDefaultManager();
54 try {
55 return jndiManager.lookup(jndiName);
56 } catch (final NamingException e) {
57 LOGGER.warn(LOOKUP, "Error looking up JNDI resource [{}].", jndiName, e);
58 return null;
59 } finally {
60 jndiManager.release();
61 }
62 }
63
64
65
66
67
68
69
70
71 private String convertJndiName(final String jndiName) {
72 if (!jndiName.startsWith(CONTAINER_JNDI_RESOURCE_PATH_PREFIX) && jndiName.indexOf(':') == -1) {
73 return CONTAINER_JNDI_RESOURCE_PATH_PREFIX + jndiName;
74 }
75 return jndiName;
76 }
77 }