/** * 结束工作 退出 * * @param reqInfo * @return */ private int quitWork(LogWorkDataInfo reqInfo) { lock (m_stopDatas) { m_stopDatas.Add(reqInfo); } return(0); }
/** * 输出日志 * * @param logType * @param message */ public void log(LogType logType, String message) { lock (m_appenders) { foreach (int key in m_appenders.Keys) { // TODO 有两个时间 // message = MessageFormat.format("{0} {1} \r\n", GetNowDate("yyyy-MM-dd // HH:mm:ss"), message); message += "\r\n"; LogWorkDataInfo dataInfo = new LogWorkDataInfo(); dataInfo.m_logType = (int)logType; dataInfo.m_logContent = message; dataInfo.m_appender = m_appenders.get(key); startWork(dataInfo); } } }
/** * 开始 * * @param dataInfo */ private void startWork(LogWorkDataInfo dataInfo) { lock (m_messages) { m_messages.Add(dataInfo); } }
/** * 线程实际方法 */ public int exc() { int count = 0; lock (m_messages) { int messagesSize = m_messages.Count; if (messagesSize > 0) { for (int i = 0; i < messagesSize;) { LogWorkDataInfo message = m_messages[i]; onWorkStart(message); m_dataInfos.get(id).Add(message); m_messages.RemoveAt(i); break; } } } // 执行方法 List <LogWorkDataInfo> dataInfos = m_dataInfos[id]; int dataInfosSize = dataInfos.Count; // 检测停止 List <LogWorkDataInfo> stopDatas = new ArrayList <LogWorkDataInfo>(); int stopDatasSize = stopDatas.Count; if (stopDatasSize > 0) { lock (m_stopDatas) { stopDatasSize = m_stopDatas.Count; for (int i = 0; i < stopDatasSize; i++) { stopDatas.Add(m_stopDatas[i]); } } } for (int i = 0; i < dataInfosSize; i++) { LogWorkDataInfo pushDataInfo = dataInfos[i]; pushDataInfo.m_threadID = id; int state = 0; if (stopDatasSize > 0) { for (int j = 0; j < stopDatasSize; j++) { LogWorkDataInfo reqDataInfo = stopDatas[j]; if (reqDataInfo.m_id == pushDataInfo.m_id) { lock (m_stopDatas) { int spdSize = m_stopDatas.Count; for (int s = 0; s < spdSize; s++) { if (m_stopDatas[s].m_id == reqDataInfo.m_id) { m_stopDatas.RemoveAt(s); break; } } } state = -1; } } } if (state == 0) { state = onWorking(pushDataInfo); count++; } if (state <= 0) { quitWork(pushDataInfo); dataInfos.RemoveAt(i); i--; dataInfosSize--; } } return(count); }
/** * 工作中 * * @param dataInfo * @return */ private int onWorking(LogWorkDataInfo dataInfo) { dataInfo.m_appender.log(dataInfo.m_logType, dataInfo.m_logContent); return(0); }
/** * 开始工作 * * @param dataInfo */ private void onWorkStart(LogWorkDataInfo dataInfo) { }