1 package org.eclipse.aether.internal.impl.slf4j;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import javax.inject.Inject;
23 import javax.inject.Named;
24
25 import org.eclipse.aether.spi.locator.Service;
26 import org.eclipse.aether.spi.locator.ServiceLocator;
27 import org.eclipse.aether.spi.log.Logger;
28 import org.eclipse.aether.spi.log.LoggerFactory;
29 import org.eclipse.sisu.Nullable;
30 import org.slf4j.ILoggerFactory;
31 import org.slf4j.spi.LocationAwareLogger;
32
33
34
35
36 @Named( "slf4j" )
37 public class Slf4jLoggerFactory
38 implements LoggerFactory, Service
39 {
40
41 private static final boolean AVAILABLE;
42
43 static
44 {
45 boolean available;
46 try
47 {
48 Slf4jLoggerFactory.class.getClassLoader().loadClass( "org.slf4j.ILoggerFactory" );
49 available = true;
50 }
51 catch ( Exception e )
52 {
53 available = false;
54 }
55 catch ( LinkageError e )
56 {
57 available = false;
58 }
59 AVAILABLE = available;
60 }
61
62 public static boolean isSlf4jAvailable()
63 {
64 return AVAILABLE;
65 }
66
67 private ILoggerFactory factory;
68
69
70
71
72 public Slf4jLoggerFactory()
73 {
74
75 }
76
77 @Inject
78 Slf4jLoggerFactory( @Nullable ILoggerFactory factory )
79 {
80 setLoggerFactory( factory );
81 }
82
83 public void initService( ServiceLocator locator )
84 {
85 setLoggerFactory( locator.getService( ILoggerFactory.class ) );
86 }
87
88 public Slf4jLoggerFactory setLoggerFactory( ILoggerFactory factory )
89 {
90 this.factory = factory;
91 return this;
92 }
93
94 public Logger getLogger( String name )
95 {
96 org.slf4j.Logger logger = getFactory().getLogger( name );
97 if ( logger instanceof LocationAwareLogger )
98 {
99 return new Slf4jLoggerEx( (LocationAwareLogger) logger );
100 }
101 return new Slf4jLogger( logger );
102 }
103
104 private ILoggerFactory getFactory()
105 {
106 if ( factory == null )
107 {
108 factory = org.slf4j.LoggerFactory.getILoggerFactory();
109 }
110 return factory;
111 }
112
113 private static final class Slf4jLogger
114 implements Logger
115 {
116
117 private final org.slf4j.Logger logger;
118
119 Slf4jLogger( org.slf4j.Logger logger )
120 {
121 this.logger = logger;
122 }
123
124 public boolean isDebugEnabled()
125 {
126 return logger.isDebugEnabled();
127 }
128
129 public void debug( String msg )
130 {
131 logger.debug( msg );
132 }
133
134 public void debug( String msg, Throwable error )
135 {
136 logger.debug( msg, error );
137 }
138
139 public boolean isWarnEnabled()
140 {
141 return logger.isWarnEnabled();
142 }
143
144 public void warn( String msg )
145 {
146 logger.warn( msg );
147 }
148
149 public void warn( String msg, Throwable error )
150 {
151 logger.warn( msg, error );
152 }
153
154 }
155
156 private static final class Slf4jLoggerEx
157 implements Logger
158 {
159
160 private static final String FQCN = Slf4jLoggerEx.class.getName();
161
162 private final LocationAwareLogger logger;
163
164 Slf4jLoggerEx( LocationAwareLogger logger )
165 {
166 this.logger = logger;
167 }
168
169 public boolean isDebugEnabled()
170 {
171 return logger.isDebugEnabled();
172 }
173
174 public void debug( String msg )
175 {
176 logger.log( null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, null );
177 }
178
179 public void debug( String msg, Throwable error )
180 {
181 logger.log( null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, error );
182 }
183
184 public boolean isWarnEnabled()
185 {
186 return logger.isWarnEnabled();
187 }
188
189 public void warn( String msg )
190 {
191 logger.log( null, FQCN, LocationAwareLogger.WARN_INT, msg, null, null );
192 }
193
194 public void warn( String msg, Throwable error )
195 {
196 logger.log( null, FQCN, LocationAwareLogger.WARN_INT, msg, null, error );
197 }
198
199 }
200
201 }