001
014
015 package com.liferay.portal.servlet.filters.threaddump;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.log.SanitizerLogWrapper;
020 import com.liferay.portal.kernel.util.ThreadUtil;
021
022
026 public class ThreadDumper implements Runnable {
027
028 public boolean isExecuted() {
029 return _executed;
030 }
031
032 @Override
033 public void run() {
034 if (_log.isInfoEnabled()) {
035 Log log = SanitizerLogWrapper.allowCRLF(_log);
036
037 log.info(ThreadUtil.threadDump());
038 }
039 else {
040 Class<?> clazz = getClass();
041
042 _log.error(
043 "Thread dumps require the log level to be at least INFO for " +
044 clazz.getName());
045 }
046
047 _executed = true;
048 }
049
050 private static Log _log = LogFactoryUtil.getLog(ThreadDumper.class);
051
052 private boolean _executed;
053
054 }