Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
Let's start with the basics first. In order to write into the log files correctly, we should make use of the LogUtil (Source code: https://github.com/jogetworkflow/jw-community/blob/8.0-SNAPSHOT/wflow-commons/src/main/java/org/joget/commons/util/LogUtil.java) utility class.
We should not use the following to print out log in writing our own plugins.
System.out.println("Execution is successful");
This is because this line of message would appear in catalina.out but not in the default Joget's log file, joget.log.
Instead, we should make use of these methods provided by LogUtil. Check out the some sample in the codes used by Email Tool (Source code: https://github.com/jogetworkflow/jw-community/blob/8.0-SNAPSHOT/wflow-core/src/main/java/org/joget/apps/app/lib/EmailTool.java#L227)
LogUtil.info(EmailTool.class.getName(), "EmailTool: Sending email from=" + email.getFromAddress().toString() + ", to=" + to + "cc=" + cc + ", bcc=" + bcc + ", subject=" + email.getSubject()); LogUtil.info(EmailTool.class.getName(), "EmailTool: Sending email completed for subject=" + email.getSubject()); LogUtil.error(EmailTool.class.getName(), ex, "");
This applies to Joget DX Version 7.0.26 and onwards
Navigate to the "[JogetFolder]\apache-tomcat-8.5.72\webapps\jw\WEB-INF\classes\log4j2.xml" configuration file and check out the use of EMAIL rolling files to see how EmailTool, UserNotificationAuditTrail, and ExportFormEmailTool are writing into email.log file.
<RollingFile name="EMAIL" fileName="${LOGDIR}/email.log" filePattern="${LOGDIR}/email.log.%d{yyyyMMdd}.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%-5p %d{dd MMM yyyy HH:mm:ss} %-50c - %m%throwable{0}%n</Pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10MB" /> <TimeBasedTriggeringPolicy interval="1"/> </Policies> <DefaultRolloverStrategy max="5" /> </RollingFile> <!-- Email log file --> <Logger name="org.joget.apps.app.lib.EmailTool" level="debug" additivity="true"> <AppenderRef ref="EMAIL"/> </Logger> <Logger name="org.joget.apps.app.lib.UserNotificationAuditTrail" level="debug" additivity="true"> <AppenderRef ref="EMAIL"/> </Logger> <Logger name="org.joget.plugin.enterprise.ExportFormEmailTool" level="debug" additivity="true"> <AppenderRef ref="EMAIL"/> </Logger>
Identifying App Origin in Log Files
For example, let's look at these log messages.
ERROR 17 Jun 2019 17:29:39 org.joget.apps.app.lib.EmailTool - org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.outlook.comtest:587 org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.outlook.comtest:587 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421) at org.apache.commons.mail.Email.send(Email.java:1448) at org.joget.apps.app.lib.EmailTool$1.run(EmailTool.java:239) at java.lang.Thread.run(Thread.java:748) at org.joget.commons.util.PluginThread.run(PluginThread.java:22)
There is no way that we can tell from which Joget app the EmailTool is triggered. However, in a Process Tool's execute method, we can obtain the appDef object which contains the Joget app information. Check out the sample code below.
public Object execute(Map properties) { AppDefinition appDef = (AppDefinition) properties.get("appDef"); String appInfoAndMessage = appDef.toString() + "- Something happened"; LogUtil.error(EmailTool.class.getName(), ex, appInfoAndMessage); }
This way, we would be able to trace to the app that triggers and writes the line of message in the log file.
Where / How to obtain App Definition?
The object "appDef" is available in the following type of plugins.
Form Post Submission Processing Tool
In other plugin types, we can try to obtain the App Definition object by using the following codes.
import org.joget.apps.app.service.AppUtil; AppDefinition appDef = AppUtil.getCurrentAppDefinition();
As for joget.log, we are already using Log4J for rotation as seen in the log4j.properties file snippet above.