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 | LinkageError e )
52 {
53 available = false;
54 }
55 AVAILABLE = available;
56 }
57
58 public static boolean isSlf4jAvailable()
59 {
60 return AVAILABLE;
61 }
62
63 private ILoggerFactory factory;
64
65
66
67
68 public Slf4jLoggerFactory()
69 {
70
71 }
72
73 @Inject
74 Slf4jLoggerFactory( @Nullable ILoggerFactory factory )
75 {
76 setLoggerFactory( factory );
77 }
78
79 public void initService( ServiceLocator locator )
80 {
81 setLoggerFactory( locator.getService( ILoggerFactory.class ) );
82 }
83
84 public Slf4jLoggerFactory setLoggerFactory( ILoggerFactory factory )
85 {
86 this.factory = factory;
87 return this;
88 }
89
90 public Logger getLogger( String name )
91 {
92 org.slf4j.Logger logger = getFactory().getLogger( name );
93 if ( logger instanceof LocationAwareLogger )
94 {
95 return new Slf4jLoggerEx( (LocationAwareLogger) logger );
96 }
97 return new Slf4jLogger( logger );
98 }
99
100 private ILoggerFactory getFactory()
101 {
102 if ( factory == null )
103 {
104 factory = org.slf4j.LoggerFactory.getILoggerFactory();
105 }
106 return factory;
107 }
108
109 private static final class Slf4jLogger
110 implements Logger
111 {
112
113 private final org.slf4j.Logger logger;
114
115 Slf4jLogger( org.slf4j.Logger logger )
116 {
117 this.logger = logger;
118 }
119
120 public boolean isDebugEnabled()
121 {
122 return logger.isDebugEnabled();
123 }
124
125 public void debug( String msg )
126 {
127 logger.debug( msg );
128 }
129
130 public void debug( String msg, Throwable error )
131 {
132 logger.debug( msg, error );
133 }
134
135 public boolean isWarnEnabled()
136 {
137 return logger.isWarnEnabled();
138 }
139
140 public void warn( String msg )
141 {
142 logger.warn( msg );
143 }
144
145 public void warn( String msg, Throwable error )
146 {
147 logger.warn( msg, error );
148 }
149
150 }
151
152 private static final class Slf4jLoggerEx
153 implements Logger
154 {
155
156 private static final String FQCN = Slf4jLoggerEx.class.getName();
157
158 private final LocationAwareLogger logger;
159
160 Slf4jLoggerEx( LocationAwareLogger logger )
161 {
162 this.logger = logger;
163 }
164
165 public boolean isDebugEnabled()
166 {
167 return logger.isDebugEnabled();
168 }
169
170 public void debug( String msg )
171 {
172 logger.log( null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, null );
173 }
174
175 public void debug( String msg, Throwable error )
176 {
177 logger.log( null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, error );
178 }
179
180 public boolean isWarnEnabled()
181 {
182 return logger.isWarnEnabled();
183 }
184
185 public void warn( String msg )
186 {
187 logger.log( null, FQCN, LocationAwareLogger.WARN_INT, msg, null, null );
188 }
189
190 public void warn( String msg, Throwable error )
191 {
192 logger.log( null, FQCN, LocationAwareLogger.WARN_INT, msg, null, error );
193 }
194
195 }
196
197 }