Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

how to debug or log info in bean

Avatar

Level 6

hello here.

So one of my component java bean functions is not returning result I am expecting.

I added log.info  to trace , doesn't print anything.

 

Then used debug from Eclipse , doesn't stop on breakpoints.

 

Where and what I should do?

1 Accepted Solution

Avatar

Correct answer by
Level 10

Try this snippet of code.

Resource r = resourceResolver.getResource(path); Asset a = r.adaptTo(Asset.class); Rendition rnd = a.getOriginal(); long size = rnd.getSize();

View solution in original post

34 Replies

Avatar

Level 10
Hi, Can you tell me how u r executing this piece of code, are you calling this via some method in your jsp?       

Avatar

Level 10

You can log information in the AEM log using code like:

/** Default log. */
protected final Logger log = LoggerFactory.getLogger(this.getClass());
               

private Session session;
private java.util.Iterator<Authorizable> users = null ;
     
//Inject a Sling ResourceResolverFactory
@Reference
private ResourceResolverFactory resolverFactory;
 
@Override
public String getCQUsers() {
         
 try
 {
  //Invoke the adaptTo method to create a Session 
  ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
  session = resourceResolver.adaptTo(Session.class);
             
  //Create a UserManager instance from the session object
  UserManager userManager = ((JackrabbitSession) session).getUserManager();
 
   users= userManager.findAuthorizables("jcr:primaryType", "rep:User");
 
  while (users.hasNext()) {
   
      Authorizable auth = users.next();
      if (!auth.isGroup()) {
 
          //Get the ID of the user
        String id = auth.getID();
        log.info("Retrieved USER "+id) ;
       
    }
        }
     
    // Log out
    session.logout();             
    return "All AEM Users are written to the log file" ;  
}
catch(Exception e)
{
         log.info("CQ ERROR: "+e.getMessage())  ; 
}
         
return null;
 }
}

 

See https://helpx.adobe.com/experience-manager/using/developing-aem-osgi-bundles-jackrabbit.html

Avatar

Employee

Hi,

for debugging, did you use the approach defined here: https://helpx.adobe.com/experience-manager/kb/CQ5HowToSetupRemoteDebuggingWithEclipse.html

When creating the debugging configuration, did you define where the source code is located?

Regards,

Opkar

Avatar

Level 10

I am assuming this is component in OSGI.

I prefer using this library for logging, its very helpful, can you try to integrate this. Its simple

http://www.slf4j.org/manual.html

Avatar

Level 6

hi...

 

yes i am using it. but it is not printing to adobe error.log

 

and this java class is in <package>.components

 

what do you mean by component in OSGI?

Avatar

Level 10

In OSGI,

Can you open logger configuration and find out whether there is a separate log file configured for your class in  which this code is present.

Also please check what is the log level setup.

Are you able to see logs of other classes ?

Link: http://localhost:4502/system/console/configMgr

Avatar

Level 10

Can you please share snippet of your code?

Can you ensure that JAR files required are present in you OSGI.

Avatar

Level 6

as far as I can see the core bundle is present in

http://localhost:4502/system/console/bundles

http://localhost:4502/system/console/osgi-installer

I need to show a DAM asset file size in 1 of my components.

 

So I pass here URL as for example  /content/dam/project_name/<path>/filename.pdf

 

  private int getFileSize(URL url) {
        HttpURLConnection conn = null;
        try {
            log.info(" URL : " +  url.toString());
            conn = (HttpURLConnection) url.openConnection();
            log.info(" connected");
            conn.setRequestMethod("HEAD");
            conn.getInputStream();
            
            log.info(" input streem");
            
            return conn.getContentLength();
            
           
            
        } catch (IOException e) {
            e.printStackTrace();
            return -1;
        } finally {
            conn.disconnect();
        }
  }

Avatar

Level 10

Did you properly declare the logger:

/** Default log. */

protected final Logger log = LoggerFactory.getLogger(this.getClass());

the information is written to the aem log file too. 

Avatar

Employee

Hi,

can you explain how the the URL you are calling will lead to your code being invoked? Are you calling the URL directly?

What kind of Java class is it?

It sounds as if you code is simply not being called. Doing things crudely, you should be able to see "System.out.println("");" statements if your code was being called.

Regards,

Opkar

Avatar

Employee

So the bundle that contains your java code is empty?

Did you follow the guide[1] for adding Java classes to your OSGI bundle? It seems like your maven file has not been configured correctly to include the java class. After building you bundle, you should be able to unpack the jar file and see your class file.

Regards,

Opkar

[1] https://helpx.adobe.com/experience-manager/using/creating-osgi-bundles-digital-marketing.html

Avatar

Level 6

oh not mine was:

private final Logger log = LoggerFactory.getLogger(getClass());

 

I added this, compiled and deployed. but it is still not writing log.

should i restart?

Avatar

Level 6

Hi,

It is one of components Java bean class.

I access to the web page via WCM in localhost:4502 and I see the component, but the file size is shown as 0.00kb

ButI don't see any log.

I've  used System.out.println("") too.

Avatar

Employee

Hi,

unless I have missed it, you haven't explained how you are expecting your code to be called? Is it called by a JSP, is it called by another Java OSGI Service?

Regards,

Opkar

Avatar

Level 6

all logs in author\crx-quickstart\logs folder

Avatar

Level 6

hellooo

before the calling the private method it is printing it

 

why?

Avatar

Level 6

hi

My Java class is working fine

all other info of this component is shown correctly...

Avatar

Level 6

Hi, thank you for trying to help me

 

here is a screenshot [img]logging.png[/img]

Avatar

Level 10

This doesn't look like you are calling the method, its just creating a bean object and setting the property.

Here's what I think, you are using getter setter method in you bean class.

Getter method should only return the value, where as to set value to some instance object you should use setter method. but in this case you are passing arguments to getter method which doesn't seems to be a good one. Please have a setter method to set the value of URL instance variable and then use below code

<c:set var="filesize"  value="${ouritem.fileSize}"/> <c:out value="${filesize}"/>