1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.logging;
17
18 import org.osgi.framework.BundleContext;
19 import org.osgi.framework.ServiceReference;
20 import org.osgi.service.log.LogService;
21 import org.osgi.util.tracker.ServiceTracker;
22
23
24
25
26
27
28
29
30
31
32
33 public class OsgiLoggerFactory extends InternalLoggerFactory {
34
35 private final ServiceTracker logServiceTracker;
36 private final InternalLoggerFactory fallback;
37 volatile LogService logService;
38
39 public OsgiLoggerFactory(BundleContext ctx) {
40 this(ctx, null);
41 }
42
43 public OsgiLoggerFactory(BundleContext ctx, InternalLoggerFactory fallback) {
44 if (ctx == null) {
45 throw new NullPointerException("ctx");
46 }
47 if (fallback == null) {
48 fallback = InternalLoggerFactory.getDefaultFactory();
49 if (fallback instanceof OsgiLoggerFactory) {
50 fallback = new JdkLoggerFactory();
51 }
52 }
53
54 this.fallback = fallback;
55 logServiceTracker = new ServiceTracker(
56 ctx, "org.osgi.service.log.LogService", null) {
57 @Override
58 public Object addingService(ServiceReference reference) {
59 LogService service = (LogService) super.addingService(reference);
60 logService = service;
61 return service;
62 }
63
64 @Override
65 public void removedService(ServiceReference reference,
66 Object service) {
67 logService = null;
68 }
69 };
70 logServiceTracker.open();
71 }
72
73 public InternalLoggerFactory getFallback() {
74 return fallback;
75 }
76
77 public LogService getLogService() {
78 return logService;
79 }
80
81 public void destroy() {
82 logService = null;
83 logServiceTracker.close();
84 }
85
86 @Override
87 public InternalLogger newInstance(String name) {
88 return new OsgiLogger(this, name, fallback.newInstance(name));
89 }
90 }