Search code examples
javaslf4jtapestry

Tapestry 5, Logging in the classes that are not pages


I'm using Mark W. Shead's 10 Minute Demo (the link is visible from here) on Tomcat, and it works fine. The direct link to the source code is here

I would like put some logging into the classes that are not page classes. For example, the .services.AppModule class.

In the Tapestry documentation it has an example for a page class like this:

import org.apache.tapestry5.ioc.annotations.Inject;

public class MyPage
{
    @Inject
    private Logger logger;

    void onSuccessFromForm()
    {
        logger.info("Changes saved successfully");
    }

But I can't get that to work for the other classes, like AppModule. I get a null pointer exception when I try to use the log.

I also tried this:

@Inject
public static Logger logger = LoggerFactory.getLogger(AppModule.class);

This runs but I get no messages.

Any ideas? Thanks!


Solution

  • You should try this:

    public static Logger logger = LoggerFactory.getLogger(AppModule.class);
    

    because of the injecting, I should not to initialise the logger, or you init the logger without inject

    I think the problem is that logger is not defined in spring or somewhere, that's why the tapestry can not inject just a null reference. If you want to inject the logger, and not create it, you should find out, why dont the tapestry-project init the logger.