Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Chinese

让我们先从基础开始。为了正确写入日志文件,我们应该使用LogUtil (源代码: https://github.com/jogetworkflow/jw-community/blob/6.0-SNAPSHOT/wflow-commons/src/main/java/org/joget/commons/util/LogUtil.java)实用程序类。


在编写我们自己的插件时,我们不应使用以下内容打印日志。

Thai

เริ่มจากพื้นฐานกันก่อน ในการเขียนไฟล์บันทึกอย่างถูกต้องเราควรใช้ LogUtil (ซอร์สโค้ด: https://github.com/jogetworkflow/jw-community/blob/6.0-SNAPSHOT/wflow-commons/src/main/java/org/joget/commons/util/LogUtil.java) คลาสยูทิลิตี้ เมื่อเขียนปลั๊กอินของเราเราไม่ควรใช้สิ่งต่อไปนี้เพื่อพิมพ์บันทึก

Code Block
linenumberstrue
System.out.println("Execution is successful");

...

Chinese

这是因为此消息行将出现在catalina.out中,而不出现在默认的Joget日志文件joget.log中。

相反,我们应该利用LogUtil提供的这些方法。在Email Tool使用的代码中查看一些示例 (源代码https://github.com/jogetworkflow/jw-community/blob/6.0-SNAPSHOT/wflow-core/src/main/java/org/joget/apps/app/lib/EmailTool.java#L227)

Thai

นี่เป็นเพราะบรรทัดข้อความนี้จะปรากฏใน catalina.out แทนไฟล์บันทึก Joget เริ่มต้น joget.log แต่เราควรใช้ประโยชน์จากวิธีการเหล่านี้โดย LogUtil ดูตัวอย่างในรหัสที่ใช้โดยเครื่องมืออีเมล (ซอร์สโค้ดhttps://github.com/jogetworkflow/jw-community/blob/6.0-SNAPSHOT/wflow-core/src/main/java/org/joget/apps/app/lib/EmailTool.java#L227)

Code Block
linenumberstrue
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, "");

...

Chinese

您可能已经注意到默认情况下,由于电子邮件工具和相关插件正在写入此特定文件,因此我们将日志文件命名为email.log。我们还可以考虑使用这种方法来分解写入单个日志文件的行数,以更好地进行故障排除。

导航到“ [JogetFolder] \ apache-tomcat-8.5.23 \ webapps \ jw \ WEB-INF \ classes \ log4j.properties”配置文件,并检查R2标签的使用,以了解EmailToolUserNotificationAuditTrailExportFormEmailTool如何写入email.log文件。

Thai

คุณอาจสังเกตเห็นแล้วว่าโดยค่าเริ่มต้นเรามีไฟล์บันทึกชื่อเป็น email.log เป็นเครื่องมืออีเมลและปลั๊กอินที่เกี่ยวข้องกำลังเขียนลงในไฟล์นี้โดยเฉพาะ นอกจากนี้เรายังสามารถพิจารณาใช้วิธีนี้เพื่อแยกจำนวนบรรทัดที่เขียนลงในไฟล์บันทึกเดียวเพื่อการแก้ไขปัญหาที่ดี นำทางไปยังไฟล์กำหนดค่า "[JogetFolder] \ apache-tomcat-8.5.23 \ webapps \ jw \ WEB-INF \ คลาส \ log4j.properties" และตรวจสอบการใช้แท็ก R2 เพื่อดูว่า EmailTool, UserNotificationAuditTrail และ ExportFormEmailTool เป็นอย่างไร แล้วเขียนลงในไฟล์ email.log



Code Block
titlelog4j.properties
linenumberstrue
log4j.logger.org.joget.apps.app.lib.EmailTool=DEBUG, R2
log4j.logger.org.joget.apps.app.lib.UserNotificationAuditTrail=DEBUG, R2
log4j.logger.org.joget.plugin.enterprise.ExportFormEmailTool=DEBUG, R2

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p %d{dd MMM yyyy HH:mm:ss} %c %x - %m%n

# R is set to be DailyRollingFileAppender
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/joget.log
log4j.appender.R.DatePattern='.'yyyyMMdd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-5p %d{dd MMM yyyy HH:mm:ss} %c %x - %m%n

# R2 is set to be DailyRollingFileAppender
log4j.appender.R2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R2.File=${catalina.home}/logs/email.log
log4j.appender.R2.DatePattern='.'yyyyMMdd
log4j.appender.R2.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.R2.layout.ConversionPattern=%-5p %d{dd MMM yyyy HH:mm:ss} %-50c - %m%throwable{0}%n


...

Chinese

在上一节中,我们讨论了使用LogUtil写入日志文件以及如何写入单独的文件。当我们在同一个Joget副本中运行太多应用程序时,有时会将某些消息行追溯到触发它们的Joget应用程序的来源。

例如,让我们看一下这些日志消息。

Thai

ในส่วนด้านบนเราได้พูดคุยเกี่ยวกับการใช้ LogUtil เพื่อเขียนลงในล็อกไฟล์และวิธีเขียนลงในไฟล์แยกกันด้วย เมื่อเรามีแอพจำนวนมากที่ทำงานอยู่ใน Joget เดียวกันบางครั้งก็มีการติดตามข้อความบางข้อความถึงต้นกำเนิดของแอพ Joget ที่เรียกใช้งาน ตัวอย่างเช่นลองดูที่ข้อความบันทึกเหล่านี้

Code Block
titleSample log messages
linenumberstrue
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)

...

Chinese

我们无法确定从哪个Joget应用程序触发了EmailTool。但是,在Process Tool的execute方法中,我们可以获得包含Joget应用程序信息的appDef对象。

查看下面的示例代码。

Thai

ไม่มีวิธีที่เราสามารถบอกได้ว่าแอพ Joget ใดที่ EmailTool ทำงาน อย่างไรก็ตามในวิธีการดำเนินการของเครื่องมือประมวลผลเราสามารถรับวัตถุ appDef ซึ่งมีข้อมูลแอป Joget ลองดูโค้ดตัวอย่างด้านล่าง

Code Block
languagejava
linenumberstrue
public Object execute(Map properties) {
	
	AppDefinition appDef = (AppDefinition) properties.get("appDef");
	String appInfoAndMessage = appDef.toString() + "- Something happened";
	LogUtil.error(EmailTool.class.getName(), ex, appInfoAndMessage);
	
}

...

Chinese

这样,我们将能够跟踪到触发并在日志文件中写入消息行的应用程序。

Thai

ด้วยวิธีนี้เราจะสามารถติดตามไปยังแอปพลิเคชันที่เรียกใช้และเขียนบรรทัดข้อความในไฟล์บันทึก

Info
titleWhere / How to obtain App Definition?

The object "appDef" is available in the following type of plugins.

Chinese

以下类型的插件中提供了对象“ appDef”。

  • Form Post Submission Processing Tool

  • Process Tool

In other plugin types, we can try to obtain the App Definition object by using the following codes.

Chinese
在其他插件类型中,我们可以尝试使用以下代码来获取App Definition对象。
Code Block
linenumberstrue
import org.joget.apps.app.service.AppUtil;

AppDefinition appDef = AppUtil.getCurrentAppDefinition();

...

Chinese

我们可以考虑对日志文件进行LogRotate。请查看以下链接:

Thai

เราสามารถพิจารณา LogRotate ไฟล์บันทึก โปรดดูลิงค์ต่อไปนี้: -

...

Chinese

至于joget.log,我们已经使用Log4J进行旋转了,如上面的log4j.properties文件片段所示。

Thai

สำหรับ joget.log เราใช้ Log4J สำหรับการหมุนดังที่แสดงในตัวอย่างไฟล์ log4j.properties ด้านบน