package com.xxl.job.core.context; import com.xxl.job.core.log.XxlJobFileAppender; import com.xxl.job.core.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.helpers.FormattingTuple; import org.slf4j.helpers.MessageFormatter; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; /** * helper for xxl-job * * @author liyh */ public class XxlJobHelper { // ---------------------- base info ---------------------- /** * current JobId * * @return */ public static long getJobId() { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return -1; } return xxlJobContext.getJobId(); } /** * current JobParam * * @return */ public static String getJobParam() { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return null; } return xxlJobContext.getJobParam(); } // ---------------------- for log ---------------------- /** * current JobLogFileName * * @return */ public static String getJobLogFileName() { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return null; } return xxlJobContext.getJobLogFileName(); } // ---------------------- for shard ---------------------- /** * current ShardIndex * * @return */ public static int getShardIndex() { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return -1; } return xxlJobContext.getShardIndex(); } /** * current ShardTotal * * @return */ public static int getShardTotal() { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return -1; } return xxlJobContext.getShardTotal(); } // ---------------------- tool for log ---------------------- private static Logger logger = LoggerFactory.getLogger("xxl-job logger"); /** * append log with pattern * * @param appendLogPattern like "aaa {} bbb {} ccc" * @param appendLogArguments like "111, true" */ public static boolean log(String appendLogPattern, Object... appendLogArguments) { FormattingTuple ft = MessageFormatter.arrayFormat(appendLogPattern, appendLogArguments); String appendLog = ft.getMessage(); /*appendLog = appendLogPattern; if (appendLogArguments!=null && appendLogArguments.length>0) { appendLog = MessageFormat.format(appendLogPattern, appendLogArguments); }*/ StackTraceElement callInfo = new Throwable().getStackTrace()[1]; return logDetail(callInfo, appendLog); } /** * append exception stack * * @param e */ public static boolean log(Throwable e) { StringWriter stringWriter = new StringWriter(); e.printStackTrace(new PrintWriter(stringWriter)); String appendLog = stringWriter.toString(); StackTraceElement callInfo = new Throwable().getStackTrace()[1]; return logDetail(callInfo, appendLog); } /** * append log * * @param callInfo * @param appendLog */ private static boolean logDetail(StackTraceElement callInfo, String appendLog) { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return false; } /*// "yyyy-MM-dd HH:mm:ss [ClassName]-[MethodName]-[LineNumber]-[ThreadName] log"; StackTraceElement[] stackTraceElements = new Throwable().getStackTrace(); StackTraceElement callInfo = stackTraceElements[1];*/ StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(DateUtil.formatDateTime(new Date())).append(" ") .append("[" + callInfo.getClassName() + "#" + callInfo.getMethodName() + "]").append("-") .append("[" + callInfo.getLineNumber() + "]").append("-") .append("[" + Thread.currentThread().getName() + "]").append(" ") .append(appendLog != null ? appendLog : ""); String formatAppendLog = stringBuffer.toString(); // appendlog String logFileName = xxlJobContext.getJobLogFileName(); if (logFileName != null && logFileName.trim().length() > 0) { XxlJobFileAppender.appendLog(logFileName, formatAppendLog); return true; } else { logger.info(">>>>>>>>>>> {}", formatAppendLog); return false; } } // ---------------------- tool for handleResult ---------------------- /** * handle success * * @return */ public static boolean handleSuccess() { return handleResult(XxlJobContext.HANDLE_CODE_SUCCESS, null); } /** * handle success with log msg * * @param handleMsg * @return */ public static boolean handleSuccess(String handleMsg) { return handleResult(XxlJobContext.HANDLE_CODE_SUCCESS, handleMsg); } /** * handle fail * * @return */ public static boolean handleFail() { return handleResult(XxlJobContext.HANDLE_CODE_FAIL, null); } /** * handle fail with log msg * * @param handleMsg * @return */ public static boolean handleFail(String handleMsg) { return handleResult(XxlJobContext.HANDLE_CODE_FAIL, handleMsg); } /** * handle timeout * * @return */ public static boolean handleTimeout() { return handleResult(XxlJobContext.HANDLE_CODE_TIMEOUT, null); } /** * handle timeout with log msg * * @param handleMsg * @return */ public static boolean handleTimeout(String handleMsg) { return handleResult(XxlJobContext.HANDLE_CODE_TIMEOUT, handleMsg); } /** * @param handleCode 200 : success * 500 : fail * 502 : timeout * @param handleMsg * @return */ public static boolean handleResult(int handleCode, String handleMsg) { XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); if (xxlJobContext == null) { return false; } xxlJobContext.setHandleCode(handleCode); if (handleMsg != null) { xxlJobContext.setHandleMsg(handleMsg); } return true; } }