package org.dayatang.dsmonitor.monitor; import org.apache.commons.lang3.time.DateFormatUtils; import org.dayatang.dsmonitor.GeminiConnection; import org.dayatang.utils.Slf4JLogger; import java.sql.SQLException; import java.util.Set; public class GeminiConnectionLogTimeoutMonitor extends AbstractGeminiConnectionTimeoutMonitor { private final Slf4JLogger LOGGER = Slf4JLogger .getLogger(GeminiConnectionLogTimeoutMonitor.class); private static String DATE_PATTERN = "yyyy-MM-dd HH:mm:ss"; @Override public void monitor() { logConnections(getAliveTimeoutConnections(), "活动的超时数据库连接"); } private void logConnections(Set<GeminiConnection> connections, String title) { if (connections.isEmpty()) { LOGGER.info("没有【{}】,超时时间为:【{}】ms", title, getTimeout()); return; } LOGGER.info("======================================================================================="); LOGGER.info("======================================================================================="); LOGGER.info("============= ============="); LOGGER.info("============= 以下是{},超时时间为:【{}】ms =============", title, getTimeout()); LOGGER.info("============= ============="); LOGGER.info("======================================================================================="); LOGGER.info("======================================================================================="); for (GeminiConnection conn : connections) { logConnection(conn); } } private void logConnection(GeminiConnection connection) { try { if (connection.isClosed()) { LOGGER.info("数据库连接HashCode【{}】,创建时间【{}】,耗时【{}】毫秒", connection.hashCode(), formatTime(connection.getCreationTime()), connection.getSurvivalTime()); } else { LOGGER.info("数据库连接HashCode【{}】,URL=【{}】,创建时间【{}】,耗时【{}】毫秒", connection.hashCode(), connection.getMetaData().getURL(), formatTime(connection.getCreationTime()), connection.getSurvivalTime()); } LOGGER.info("调用堆栈为:"); for (StackTraceElement ste : connection.getStackTraceElements()) { LOGGER.info(" " + ste); } } catch (SQLException ex) { ex.printStackTrace(); } } private String formatTime(long date) { return DateFormatUtils.format(date, DATE_PATTERN); } }