From cc76e63d85ad5859e77d6fd8b5e9cbc59d25a9b0 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 21 Jul 2020 18:25:20 +0800 Subject: [PATCH] =?UTF-8?q?IDEMPIERE-4372=20Performance:=20only=20add=20lo?= =?UTF-8?q?g=20record=20and=20sql=20statement=20to=20=E2=80=A6=20(#172)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * IDEMPIERE-4372 Performance: only add log record and sql statement to context if trace/debug level <= debug/info Minor clean up and thread safe fix for CLogErrorBuffer and MIssue Only add LogRecord and SQL to context if TraceLevel is <= INFO * IDEMPIERE-4372 Performance: only add log record and sql statement to context if trace/debug level <= debug/info add back DB.isConnected check remove redundant CLogErrorBuffer call from DB.isConnected more fine grained synchronization --- .../src/org/compiere/model/GridTable.java | 6 +- .../src/org/compiere/model/MIssue.java | 7 +- .../org/compiere/util/CLogErrorBuffer.java | 99 ++++++++++++------- .../src/org/compiere/util/DB.java | 7 -- .../adempiere/webui/window/FindWindow.java | 3 +- 5 files changed, 72 insertions(+), 50 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/GridTable.java b/org.adempiere.base/src/org/compiere/model/GridTable.java index a60fe4dc2b..fdfb65cecf 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTable.java +++ b/org.adempiere.base/src/org/compiere/model/GridTable.java @@ -424,8 +424,10 @@ public class GridTable extends AbstractTableModel m_SQL += " ORDER BY " + m_orderClause; } // - log.fine(m_SQL_Count); - Env.setContext(m_ctx, m_WindowNo, m_TabNo, GridTab.CTX_SQL, m_SQL); + if (log.isLoggable(Level.FINE)) + log.fine(m_SQL_Count); + if (log.isLoggable(Level.INFO)) + Env.setContext(m_ctx, m_WindowNo, m_TabNo, GridTab.CTX_SQL, m_SQL); return m_SQL; } // createSelectSql diff --git a/org.adempiere.base/src/org/compiere/model/MIssue.java b/org.adempiere.base/src/org/compiere/model/MIssue.java index b11570ba91..e684afbdfd 100644 --- a/org.adempiere.base/src/org/compiere/model/MIssue.java +++ b/org.adempiere.base/src/org/compiere/model/MIssue.java @@ -53,9 +53,10 @@ public class MIssue extends X_AD_Issue */ public static MIssue create (LogRecord record) { - s_log.config(record.getMessage()); + if (s_log.isLoggable(Level.CONFIG)) + s_log.config(record.getMessage()); MSystem system = MSystem.get(Env.getCtx()); - if (!DB.isConnected() + if (!DB.isConnected(false) || system == null || !system.isAutoErrorReport()) return null; @@ -406,7 +407,7 @@ public class MIssue extends X_AD_Issue public String report() { //if (true) - return "-"; + return null; /*StringBuilder parameter = new StringBuilder("?"); if (getRecord_ID() == 0) // don't report return "ID=0"; diff --git a/org.adempiere.base/src/org/compiere/util/CLogErrorBuffer.java b/org.adempiere.base/src/org/compiere/util/CLogErrorBuffer.java index 491c870a27..b9f0c49d74 100644 --- a/org.adempiere.base/src/org/compiere/util/CLogErrorBuffer.java +++ b/org.adempiere.base/src/org/compiere/util/CLogErrorBuffer.java @@ -73,6 +73,11 @@ public class CLogErrorBuffer extends Handler setFilter(CLogFilter.get()); } // initialize + private boolean isAddLogRecordToContext() + { + return CLogMgt.getLevelAsInt() <= Level.INFO.intValue(); + } + /** * Issue Error * @return true if issue error @@ -124,62 +129,83 @@ public class CLogErrorBuffer extends Handler */ public void publish (LogRecord record) { + if (!isLoggable (record)) + return; + checkContext(); @SuppressWarnings("unchecked") LinkedList m_logs = (LinkedList) Env.getCtx().get(LOGS_KEY); - if (!isLoggable (record) || m_logs == null) + if (m_logs == null) return; // Output - synchronized (m_logs) + if (isAddLogRecordToContext()) { - if (m_logs.size() >= LOG_SIZE) - m_logs.removeFirst(); - m_logs.add(record); + synchronized (m_logs) + { + if (m_logs.size() >= LOG_SIZE) + m_logs.removeFirst(); + m_logs.add(record); + } } // We have an error if (record.getLevel() == Level.SEVERE) { - @SuppressWarnings("unchecked") - LinkedList m_errors = (LinkedList) Env.getCtx().get(ERRORS_KEY); - @SuppressWarnings("unchecked") - LinkedList m_history = (LinkedList) Env.getCtx().get(HISTORY_KEY); - if (m_errors.size() >= ERROR_SIZE) + if (isAddLogRecordToContext()) { - m_errors.removeFirst(); - m_history.removeFirst(); + @SuppressWarnings("unchecked") + LinkedList m_errors = (LinkedList) Env.getCtx().get(ERRORS_KEY); + synchronized (m_errors) + { + if (m_errors.size() >= ERROR_SIZE) + { + m_errors.removeFirst(); + } + // Add Error + m_errors.add(record); + } } - // Add Error - m_errors.add(record); record.getSourceClassName(); // forces Class Name eval // Create History - ArrayList history = new ArrayList(); - for (int i = m_logs.size()-1; i >= 0; i--) + if (isAddLogRecordToContext()) { - LogRecord rec = (LogRecord)m_logs.get(i); - if (rec.getLevel() == Level.SEVERE) + @SuppressWarnings("unchecked") + LinkedList m_history = (LinkedList) Env.getCtx().get(HISTORY_KEY); + ArrayList history = new ArrayList(); + synchronized (m_history) { - if (history.size() == 0) - history.add(rec); - else - break; // don't include previous error + if (m_history.size() >= ERROR_SIZE) + { + m_history.removeFirst(); + } + for (int i = m_logs.size()-1; i >= 0; i--) + { + LogRecord rec = (LogRecord)m_logs.get(i); + if (rec.getLevel() == Level.SEVERE) + { + if (history.size() == 0) + history.add(rec); + else + break; // don't include previous error + } + else + { + history.add(rec); + if (history.size() > 10) + break; // no more then 10 history records + } + + } + LogRecord[] historyArray = new LogRecord[history.size()]; + int no = 0; + for (int i = history.size()-1; i >= 0; i--) + historyArray[no++] = (LogRecord)history.get(i); + m_history.add(historyArray); } - else - { - history.add(rec); - if (history.size() > 10) - break; // no more then 10 history records - } - } - LogRecord[] historyArray = new LogRecord[history.size()]; - int no = 0; - for (int i = history.size()-1; i >= 0; i--) - historyArray[no++] = (LogRecord)history.get(i); - m_history.add(historyArray); // Issue Reporting if (isIssueError()) { @@ -199,12 +225,11 @@ public class CLogErrorBuffer extends Handler && loggerName.indexOf("CConnection") == -1 ) { - setIssueError(false); try { MIssue.create(record); - setIssueError(true); - } catch (Throwable e) + } + catch (Throwable e) { //failed to save exception to db, print to console System.err.println(getFormatter().format(record)); diff --git a/org.adempiere.base/src/org/compiere/util/DB.java b/org.adempiere.base/src/org/compiere/util/DB.java index 3b15bb0456..3a55224a4f 100644 --- a/org.adempiere.base/src/org/compiere/util/DB.java +++ b/org.adempiere.base/src/org/compiere/util/DB.java @@ -339,11 +339,6 @@ public final class DB //direct connection boolean success = false; - CLogErrorBuffer eb = CLogErrorBuffer.get(false); - if (eb != null && eb.isIssueError()) - eb.setIssueError(false); - else - eb = null; // don't reset try { Connection conn = getConnectionRW(createNew); // try to get a connection @@ -358,8 +353,6 @@ public final class DB { success = false; } - if (eb != null) - eb.setIssueError(true); return success; } // isConnected diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index 9ba4b09e1b..2580beaba3 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -2356,7 +2356,8 @@ public class FindWindow extends Window implements EventListener, ValueCha String finalSQL = MRole.getDefault().addAccessSQL(sql.toString(), m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO); finalSQL = Env.parseContext(Env.getCtx(), m_targetWindowNo, finalSQL, false); - Env.setContext(Env.getCtx(), m_targetWindowNo, TABNO, GridTab.CTX_FindSQL, finalSQL); + if (log.isLoggable(Level.INFO)) + Env.setContext(Env.getCtx(), m_targetWindowNo, TABNO, GridTab.CTX_FindSQL, finalSQL); // Execute Qusery m_total = 999999;