Changeset 8120
- Timestamp:
- Mar 7, 2023, 10:40:50 AM (7 months ago)
- Location:
- branches/3.19-stable
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.19-stable/src/clients/web/net/sf/basedb/clients/web/extensions/service/ServiceLog.java
r8119 r8120 28 28 import java.util.Map; 29 29 import java.util.concurrent.ConcurrentLinkedDeque; 30 import java.util.concurrent.locks.Lock; 31 import java.util.concurrent.locks.ReadWriteLock; 32 import java.util.concurrent.locks.ReentrantReadWriteLock; 30 33 31 34 import org.apache.commons.collections4.iterators.UnmodifiableIterator; … … 75 78 private final String extensionId; 76 79 private final Deque<LogEntry> logEntries; 80 private final ReadWriteLock lock; 77 81 78 82 private int maxEntries; … … 88 92 this.logEntries = new ConcurrentLinkedDeque<>(); 89 93 this.maxEntries = 200; 94 this.lock = new ReentrantReadWriteLock(); 90 95 } 91 96 … … 144 149 { 145 150 return numErrors; 151 } 152 153 /** 154 Clear the log. 155 */ 156 public void clearLog() 157 { 158 // We need the write lock here since we are changing multiple properties 159 Lock l = lock.writeLock(); 160 try 161 { 162 l.lock(); 163 logEntries.clear(); 164 numEntries = 0; 165 numWarnings = 0; 166 numErrors = 0; 167 } 168 finally 169 { 170 l.unlock(); 171 } 146 172 } 147 173 … … 160 186 void add(LogEntry entry) 161 187 { 162 if (entry.level == LogLevel.DEBUG && !isDebugEnabled) return; // 163 logEntries.addFirst(entry); 164 if (entry.level == LogLevel.WARNING) numWarnings++; 165 if (entry.level == LogLevel.ERROR) numErrors++; 166 167 if (numEntries++ > maxEntries) 168 { 169 // Remove one entry 170 numEntries--; 171 LogEntry last = logEntries.removeLast(); 172 if (last.level == LogLevel.WARNING) numWarnings--; 173 if (last.level == LogLevel.ERROR) numErrors--; 188 // A read lock should be enough since we are using a ConcurrentLinkedDeque that supports multiple threads 189 Lock l = lock.readLock(); 190 try 191 { 192 l.lock(); 193 if (entry.level == LogLevel.DEBUG && !isDebugEnabled) return; // 194 logEntries.addFirst(entry); 195 if (entry.level == LogLevel.WARNING) numWarnings++; 196 if (entry.level == LogLevel.ERROR) numErrors++; 197 198 if (numEntries++ > maxEntries) 199 { 200 // Remove one entry 201 numEntries--; 202 LogEntry last = logEntries.removeLast(); 203 if (last.level == LogLevel.WARNING) numWarnings--; 204 if (last.level == LogLevel.ERROR) numErrors--; 205 } 206 } 207 finally 208 { 209 l.unlock(); 174 210 } 175 211 } -
branches/3.19-stable/www/admin/services/index.jsp
r8119 r8120 88 88 redirect = "view_log.jsp?ID="+ID+"&extensionId="+HTML.urlEncode(extensionId); 89 89 } 90 else if ("ClearLog".equals(cmd)) 91 { 92 String extensionId = request.getParameter("extensionId"); 93 ServiceLog serviceLog = ServiceLog.getLog(extensionId, false); 94 if (serviceLog != null) 95 { 96 serviceLog.clearLog(); 97 serviceLog.createLogger().log(LogLevel.INFO, "The log was cleared by "+sc.getLoggedInUserName()+" ("+sc.getLoggedInUserLogin()+")"); 98 } 99 redirect = "view_log.jsp?ID="+ID+"&extensionId="+HTML.urlEncode(extensionId); 100 } 90 101 else 91 102 { -
branches/3.19-stable/www/admin/services/services.js
r8119 r8120 36 36 Buttons.addClickHandler('close', App.closeWindow); 37 37 38 Buttons.addClickHandler('btnClearLog', services.clearLog); 38 39 Events.addEventHandler('enableDebug', 'change', services.toggleDebugLog); 39 40 … … 86 87 } 87 88 89 services.clearLog = function() 90 { 91 var extensionId = Data.get('page-data', 'extension-id'); 92 var url = 'index.jsp?ID='+App.getSessionId(); 93 url += '&cmd=ClearLog'; 94 url += '&extensionId='+extensionId; 95 location.replace(url); 96 } 97 88 98 services.toggleDebugLog = function() 89 99 { -
branches/3.19-stable/www/admin/services/view_log.jsp
r8119 r8120 38 38 %> 39 39 <base:page type="popup" title="View log" id="view-page"> 40 <base:head scripts="table.js,~services.js" styles="table.css ">40 <base:head scripts="table.js,~services.js" styles="table.css,toolbar.css"> 41 41 <style> 42 42 .level … … 85 85 title="Message" 86 86 /> 87 <div class="panelgroup bg-filled-50 bottomborder" style="height: 1.9em; padding: 0.25em; 1em;"> 88 <tbl:panel> 87 <div class="panelgroup bg-filled-50 bottomborder" style="height: 1.9em;"> 88 <tbl:toolbar> 89 <tbl:button 90 id="btnClearLog" 91 title="Clear the log" 92 image="delete.png" 93 /> 94 <tbl:label style="padding-right: 1em;"> 89 95 <label><input type="checkbox" name="enableDebug" 90 96 id="enableDebug" <%=serviceLog.isDebugEnabled()?"checked":""%> 91 97 >Enable debug logging</label> 98 </tbl:label> 99 <tbl:label style="padding-right: 1em;"> 92 100 <label><input type="checkbox" name="autoUpdate" 93 101 id="autoUpdate" <%=autoUpdate?"checked":"" %> 94 102 >Auto update</label> 95 </tbl:panel> 103 </tbl:label> 104 </tbl:toolbar> 96 105 </div> 97 106 <tbl:data style="top: 1.9em; margin-top: 0px;">
Note: See TracChangeset
for help on using the changeset viewer.