Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Eclipse 4 » Logger-Layout?
Logger-Layout? [message #928693] Sun, 30 September 2012 22:26 Go to next message
David Reichl is currently offline David ReichlFriend
Messages: 9
Registered: September 2012
Junior Member
Hi,
I've just started using juno, and I'm trying to get used to die model (and of course with DI). For the beginning I injected a Logger (org.eclipse.e4.core.services.log.Logger) and it's working fine! Now I'm wondering how I could change the layout of the log-messages.? How can I do this? Is there a way like the properties-file in log4j?

Thanks!
Re: Logger-Layout? [message #929110 is a reply to message #928693] Mon, 01 October 2012 08:28 Go to previous messageGo to next message
Christoph Keimel is currently offline Christoph KeimelFriend
Messages: 386
Registered: December 2010
Location: Germany
Senior Member
Hi David

You can register your own ILoggerProvider as an OSGi service. This way you can choose your own logging framework (log4j, slf4j, ...).

Greetings
Christoph
Re: Logger-Layout? [message #955149 is a reply to message #929110] Tue, 23 October 2012 14:58 Go to previous messageGo to next message
David Reichl is currently offline David ReichlFriend
Messages: 9
Registered: September 2012
Junior Member
thanks for the answer...maybe I'm justed little bit confoused but how can register a Provider as an OSGi service?
Re: Logger-Layout? [message #955154 is a reply to message #955149] Tue, 23 October 2012 15:00 Go to previous messageGo to next message
David Reichl is currently offline David ReichlFriend
Messages: 9
Registered: September 2012
Junior Member
<<nonsense>>

[Updated on: Tue, 23 October 2012 15:09]

Report message to a moderator

Re: Logger-Layout? [message #956075 is a reply to message #955149] Wed, 24 October 2012 08:14 Go to previous messageGo to next message
Christoph Keimel is currently offline Christoph KeimelFriend
Messages: 386
Registered: December 2010
Location: Germany
Senior Member
Hi David,

this is how I register an ILoggerProvider which uses slf4j as logging framework.

public class MyPlugin implements BundleActivator {
	private ServiceRegistration<?> registration;
	
	@Override
	public void start(BundleContext bundleContext) throws Exception {
		 
	    // Use SLF4J as LoggerProvider for e4
	    ILoggerProvider logService = new ILoggerProvider() {
	    	@Override
	    	public org.eclipse.e4.core.services.log.Logger getClassLogger(Class<?> clazz) {
	    		return new Slf4jLoggerWrapper(LoggerFactory.getLogger(clazz));
	    	}
	    };
	    registration = bundleContext.registerService(ILoggerProvider.class, logService, null);
	}

	@Override
	public void stop(BundleContext bundleContext) throws Exception {
		registration.unregister();
		registration = null;
	} 
}


Greetings
Christoph

[Updated on: Thu, 25 October 2012 09:14]

Report message to a moderator

Re: Logger-Layout? [message #956293 is a reply to message #956075] Wed, 24 October 2012 11:46 Go to previous messageGo to next message
Brian de Alwis is currently offline Brian de AlwisFriend
Messages: 194
Registered: January 2012
Senior Member

Note: if you do this via a declarative service, then OSGi will activate your bundle on demand.

Eclipse Platform committer. Ask me about Eclipse support, training, and consulting.
Re: Logger-Layout? [message #956896 is a reply to message #956293] Wed, 24 October 2012 22:08 Go to previous messageGo to next message
David Reichl is currently offline David ReichlFriend
Messages: 9
Registered: September 2012
Junior Member
thanks for your help! i know i'm a greenhorn but i'm trying to get use to eclipse...

just to be sure: the important thing is the "return new Slf4jLoggerWrapper(LoggerFactory.getLogger(clazz));".

so when i get this right i could create a LogFactory which returns a self-made Log4JLogger which extends org.eclipse.e4.core.services.log.Logger and where i have my "private org.apache.log4j.Logger log". in this Log4JLogger i implement for example the method "info" like this:
@Override
	public void info(Throwable t, String message) {
		if (this.isInfoEnabled()) {
			this.log.info(buildLogMessage(message, null), t);
		}
	}


could that work?


[Updated on: Wed, 24 October 2012 22:39]

Report message to a moderator

Re: Logger-Layout? [message #956950 is a reply to message #956896] Wed, 24 October 2012 23:09 Go to previous messageGo to next message
David Reichl is currently offline David ReichlFriend
Messages: 9
Registered: September 2012
Junior Member
it works!
thank you for the help!

[Updated on: Wed, 24 October 2012 23:09]

Report message to a moderator

Re: Logger-Layout? [message #959601 is a reply to message #956950] Fri, 26 October 2012 21:11 Go to previous messageGo to next message
David Reichl is currently offline David ReichlFriend
Messages: 9
Registered: September 2012
Junior Member
hi,

I just changed my Logger so I can use a log4j-Logger and to use simple "@Inject Logger log" without define the class by my self.

My first thought was:

@Creatable
public class Logger extends org.eclipse.e4.core.services.log.Logger{
	private org.apache.log4j.Logger log = null;
	protected static char sign = '#';

	@Inject
	@SuppressWarnings("unchecked")
	public Logger(@Active MContribution contribution) {	
		String uri = contribution.getContributionURI();
		String[] uriArray = uri.split("\\.");
		String uriClass = uriArray[uriArray.length-1];
		this.log = org.apache.log4j.Logger.getLogger(uriClass);

	}
        .... 


But is this well written? Is there anotherway to get the class?
Re: Logger-Layout? [message #960629 is a reply to message #959601] Sat, 27 October 2012 17:08 Go to previous message
Brian de Alwis is currently offline Brian de AlwisFriend
Messages: 194
Registered: January 2012
Senior Member

A few comments:



  • Injection will fail if there's no MContribution available. You can use @Optional to avoid that so that the injector will inject "null" if not found.
  • But remember that the injector will normally traverse up the context hierarchy to resolve values. So your MContribution may in fact come from the injection-requestor's ancestor instead. You may choose to be injected with the IEclipseContext instead: you can then request local resolution of different values within that context.
  • I don't remember the scoping of @Creatable: IIRC the Creatable instance is remembered for that context and its descendants. So it you request a Logger from the MApplication, then that single logger instance will be used for all windows & parts. If you instead provide a context function (either declaratively through an OSGi Declarative Services, as an OSGi Service, or by registering a ContextFunction object with a context), you can compute and return a result on each injection: the value returned isn't placed into the context unless your context function explicitly places it into the context.






Eclipse Platform committer. Ask me about Eclipse support, training, and consulting.
Previous Topic:Tootip for a TreeViewer
Next Topic:Manually triggering a class with injections?
Goto Forum:
  


Current Time: Mon Dec 22 17:55:50 GMT 2014

Powered by FUDForum. Page generated in 0.03954 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software