Expand my Community achievements bar.

SOLVED

how logging works in AEM for java source code

Avatar

Level 9

There are several reference pages for configuration of various different logging systems in AEM (e.g. this and this) , but I cant find anything on how to create/inject and use them.  

In the wknd project, we see this:

 

 

private static final Logger log = LoggerFactory.getLogger(ImageListImpl.class);
:
log.warn("Could not locate the AEM WCM Core Components List SlingModel via this component's ResourceSuperType. Returning an empty list.");

 

 

Is this best practice?  It seems to be using slf4j.  Is this the AEM system wide default?
What logging injection/usage do people recommend?
How do we switch log levels etc?  Can this be done at run time?
 
1 Accepted Solution

Avatar

Correct answer by
Level 6

Hi @TB3dock 

 

Yes, the snippet you have shared is the standard practice for logging and it's slf4j.

You can create logs specific to your application and change its level here.

You can find more info about logging here: 

https://experienceleague.adobe.com/docs/experience-manager-64/deploying/configuring/configure-loggin...

 

Thanks

Swapnil 

View solution in original post

6 Replies

Avatar

Correct answer by
Level 6

Hi @TB3dock 

 

Yes, the snippet you have shared is the standard practice for logging and it's slf4j.

You can create logs specific to your application and change its level here.

You can find more info about logging here: 

https://experienceleague.adobe.com/docs/experience-manager-64/deploying/configuring/configure-loggin...

 

Thanks

Swapnil 

Avatar

Level 9

Thanks! I see there is a line for com.adobe.aem.guides.wknd, to allow the level to change.

Avatar

Community Advisor

Hi @TB3dock 

You are already referring the correct documents for AEM Logs.

https://experienceleague.adobe.com/docs/experience-manager-65/deploying/configuring/configure-loggin...

http://www.sgaemsolutions.com/2017/04/aem-logs-in-detail-part-1.html

http://www.sgaemsolutions.com/2019/12/aem-logs-in-detail-part-2.html

https://experienceleague.adobe.com/docs/experience-manager-64/administering/operations/troubleshooti...

https://www.royalcyber.com/blog/portal/custom-logging-with-aem-logger/

 

By default AEM uses slf4j log support and it's recommended by Adobe as well.

 

Log levels can be updated using "Apache Sling Logging Logger Configuration" which is a factory configuration and can be configured based on the need.

 

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:primaryType="sling:OsgiConfig"
org.apache.sling.commons.log.file="logs/something.log"
org.apache.sling.commons.log.level="debug"
org.apache.sling.commons.log.names="[com.something.abc.core]"
org.apache.sling.commons.log.pattern="\{0,date,dd.MM.yyyy HH:mm:ss.SSS} *{4}* [{2}] {3} {5}"/> 

 

Hope this helps!

Thanks! 

Avatar

Level 1

Logging in AEM (Adobe Experience Manager) for Java source code can be achieved using the SLF4J (Simple Logging Facade for Java) API.

Here are the steps to configure logging in AEM:

1. Add the SLF4J API and a logging implementation JAR to your AEM project's dependencies. The most commonly used logging implementations are Logback and Log4j.

2. Create a logback.xml or log4j.properties file in the project's classpath. These files contain the logging configuration details such as log levels, appenders, etc.

3. Add the logging statements in your Java source code using the SLF4J API. For example:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClass {
private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);

public void myMethod() {
LOGGER.debug("Debug message");
LOGGER.info("Info message");
LOGGER.warn("Warn message");
LOGGER.error("Error message");
}
}

  1. Deploy the AEM project and monitor the log files for the output of the logging statements.

By default, AEM uses the Log4j logging framework. You can configure AEM's logging settings using the OSGi configuration console. In the console, you can set the log levels and appenders for various AEM components and modules. The console can be accessed via the URL http://localhost:4502/system/console/configMgr .

It's important to properly configure the logging statements to avoid performance issues, such as unnecessary logging and excessive log volume. Properly logging important information and errors can help diagnose issues and debug problems that occur in the application.

Avatar

Level 1

Thank you for the detailed explanation on logging in AEM using SLF4J. The step-by-step guide is really helpful, especially for ensuring proper logging setup and avoiding performance pitfalls. I appreciate the insight into configuring the logging framework via the OSGi console, and I'll be sure to keep log levels and volume in mind to maintain efficient logging practices.

This will definitely help in setting up a robust logging mechanism in our AEM projects. Thanks again for the valuable information!

 

Avatar

Level 1

Hi Swapnil,

Thank you for confirming that the snippet follows standard logging practices using SLF4J.

I appreciate the information on customizing logs specific to my application and adjusting their levels.

For further details, I will refer to the provided link on configuring logging in Adobe Experience Manager.

Thanks again!

Best regards,