diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index befb58b0b55d3b31bf01db3b9de988f58767a725..3ebfa92e99b68cbea2e8a5f81b4e50a5614fbdab 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -40,7 +40,7 @@ org.slf4j - slf4j-log4j12 + slf4j-api 1.7.21 diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index ad1655c9e032b863fa4283486504dfd7ac985eda..f36e12f11a1c56e58aca50091416bc120768975a 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -31,6 +31,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe private int port = 9999; private String appName; private RegistHelper registHelper; + public static String logPath; public void setIp(String ip) { this.ip = ip; @@ -44,6 +45,9 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe public void setRegistHelper(RegistHelper registHelper) { this.registHelper = registHelper; } + public void setLogPath(String logPath) { + this.logPath = logPath; + } // ---------------------------------- job server ------------------------------------ private NetComServerFactory serverFactory = new NetComServerFactory(); diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java index 928dc9cba4e5a49a75e89dcd58cb93008fdf4125..3a021889e7766c91e29e6f222dfd2daeac3790e9 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java @@ -1,12 +1,27 @@ package com.xxl.job.core.handler; import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.log.XxlJobFileAppender; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * remote job handler * @author xuxueli 2015-12-19 19:06:38 */ public abstract class IJobHandler { + private static Logger logger = LoggerFactory.getLogger(IJobHandler.class); + + /** + * append log + * + * @param appendLog + */ + public void log(String appendLog) { + String logFileName = XxlJobFileAppender.contextHolder.get(); + XxlJobFileAppender.appendLog(logFileName, appendLog); + logger.info("xxl-job log [{}]: {}", logFileName, appendLog); + } /** * job handler diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java index d4f9bf089ee45a9766f999702ce2e606757b14f8..f0cfa168ccbecc994c27a9115012af7a3e8720c0 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java @@ -1,6 +1,7 @@ package com.xxl.job.core.handler.impl; import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.executor.XxlJobExecutor; import com.xxl.job.core.glue.GlueTypeEnum; import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.log.XxlJobFileAppender; @@ -35,17 +36,17 @@ public class ScriptJobHandler extends IJobHandler { String scriptFileName = null; if (GlueTypeEnum.GLUE_SHELL == glueType) { cmd = "bash"; - scriptFileName = XxlJobFileAppender.filePath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh"); + scriptFileName = XxlJobExecutor.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh"); } else if (GlueTypeEnum.GLUE_PYTHON == glueType) { cmd = "python"; - scriptFileName = XxlJobFileAppender.filePath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py"); + scriptFileName = XxlJobExecutor.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py"); } // make script file ScriptUtil.markScriptFile(scriptFileName, gluesource); // log file - String logFileName = XxlJobFileAppender.filePath.concat(XxlJobFileAppender.contextHolder.get()); + String logFileName = XxlJobExecutor.logPath.concat(XxlJobFileAppender.contextHolder.get()); // invoke int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params); diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java index 9bb1cf1fb131a55dfcc8659e5c59f8cc5bac2ad3..ea96dbc7c0950ae1c7d200081cdb35aeafe8ff72 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java @@ -1,9 +1,9 @@ package com.xxl.job.core.log; import com.xxl.job.core.biz.model.LogResult; -import org.apache.log4j.AppenderSkeleton; -import org.apache.log4j.Layout; -import org.apache.log4j.spi.LoggingEvent; +import com.xxl.job.core.executor.XxlJobExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.*; import java.text.SimpleDateFormat; @@ -13,18 +13,13 @@ import java.util.Date; * store trigger log in each log-file * @author xuxueli 2016-3-12 19:25:12 */ -public class XxlJobFileAppender extends AppenderSkeleton { +public class XxlJobFileAppender { + private static Logger logger = LoggerFactory.getLogger(XxlJobFileAppender.class); // for JobThread public static ThreadLocal contextHolder = new ThreadLocal(); public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - // trogger log file path - public static volatile String filePath; - public void setFilePath(String filePath) { - XxlJobFileAppender.filePath = filePath; - } - /** * log filename: yyyy-MM-dd/9999.log * @@ -35,7 +30,7 @@ public class XxlJobFileAppender extends AppenderSkeleton { public static String makeLogFileName(Date triggerDate, int logId) { // filePath/ - File filePathDir = new File(filePath); + File filePathDir = new File(XxlJobExecutor.logPath); if (!filePathDir.exists()) { filePathDir.mkdirs(); } @@ -52,20 +47,31 @@ public class XxlJobFileAppender extends AppenderSkeleton { return logFileName; } - @Override - protected void append(LoggingEvent event) { + /** + * append log + * + * @param logFileName + * @param appendLog + */ + public static void appendLog(String logFileName, String appendLog) { + + // log + if (appendLog == null) { + appendLog = ""; + } + appendLog += "\r\n"; - String logFileName = contextHolder.get(); + // log file if (logFileName==null || logFileName.trim().length()==0) { return; } - File logFile = new File(filePath, logFileName); + File logFile = new File(XxlJobExecutor.logPath, logFileName); if (!logFile.exists()) { try { logFile.createNewFile(); } catch (IOException e) { - e.printStackTrace(); + logger.error(e.getMessage(), e); return; } } @@ -75,46 +81,26 @@ public class XxlJobFileAppender extends AppenderSkeleton { FileOutputStream fos = null; try { fos = new FileOutputStream(logFile, true); - fos.write(layout.format(event).getBytes("utf-8")); - if (layout.ignoresThrowable()) { - String[] throwableInfo = event.getThrowableStrRep(); - if (throwableInfo != null) { - for (int i = 0; i < throwableInfo.length; i++) { - fos.write(throwableInfo[i].getBytes("utf-8")); - fos.write(Layout.LINE_SEP.getBytes("utf-8")); - } - } - } + fos.write(appendLog.getBytes("utf-8")); fos.flush(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { - e.printStackTrace(); + logger.error(e.getMessage(), e); } } } } catch (Exception e) { - e.printStackTrace(); + logger.error(e.getMessage(), e); } } - @Override - public void close() { - // TODO Auto-generated method stub - - } - - @Override - public boolean requiresLayout() { - // TODO Auto-generated method stub - return false; - } - /** * support read log-file + * * @param logFileName * @return log content */ @@ -124,7 +110,7 @@ public class XxlJobFileAppender extends AppenderSkeleton { if (logFileName==null || logFileName.trim().length()==0) { return new LogResult(fromLineNum, 0, "readLog fail, logFile not found", true); } - File logFile = new File(filePath, logFileName); + File logFile = new File(XxlJobExecutor.logPath, logFileName); if (!logFile.exists()) { return new LogResult(fromLineNum, 0, "readLog fail, logFile not exists", true); @@ -145,13 +131,13 @@ public class XxlJobFileAppender extends AppenderSkeleton { } } } catch (IOException e) { - e.printStackTrace(); + logger.error(e.getMessage(), e); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); + logger.error(e.getMessage(), e); } } } @@ -195,7 +181,7 @@ public class XxlJobFileAppender extends AppenderSkeleton { e.printStackTrace(); } } - } + } return null; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java index 04fad6e43c7bd3533d38e13e757e0a4946dc4063..9d352587278b9bfae6a8ac378ef6248352bb1923 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java @@ -1,6 +1,6 @@ package com.xxl.job.core.util; -import com.xxl.job.core.log.XxlJobFileAppender; +import com.xxl.job.core.executor.XxlJobExecutor; import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.PumpStreamHandler; @@ -28,7 +28,7 @@ public class ScriptUtil { */ public static void markScriptFile(String scriptFileName, String content) throws IOException { // filePath/ - File filePathDir = new File(XxlJobFileAppender.filePath); + File filePathDir = new File(XxlJobExecutor.logPath); if (!filePathDir.exists()) { filePathDir.mkdirs(); } diff --git a/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java b/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java index 635eddb71462ed12add0f023af8727f99e0169f6..556e1b5f83e06502e4432c919262f7d6e962e219 100644 --- a/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java +++ b/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java @@ -24,13 +24,13 @@ import java.util.concurrent.TimeUnit; @Service public class DemoJobHandler extends IJobHandler { private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class); - + @Override public ReturnT execute(String... params) throws Exception { - logger.info("XXL-JOB, Hello World."); + super.log("XXL-JOB, Hello World."); for (int i = 0; i < 5; i++) { - logger.info("beat at:{}", i); + super.log("beat at:" + i); TimeUnit.SECONDS.sleep(2); } return ReturnT.SUCCESS; diff --git a/xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml b/xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml index d9b450845d8f243f9e46dfedf3d96eaff71514b5..07c3c8432084eb4e0ca6b5d93ae8adc7b483c44c 100644 --- a/xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml +++ b/xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml @@ -36,6 +36,7 @@ + diff --git a/xxl-job-executor-example/src/main/resources/log4j.xml b/xxl-job-executor-example/src/main/resources/log4j.xml index 3c19fec4c18cb9615d2650c71a13ce0fc941254d..849a3fd397916a74983e6f6a423e687fcf81559f 100644 --- a/xxl-job-executor-example/src/main/resources/log4j.xml +++ b/xxl-job-executor-example/src/main/resources/log4j.xml @@ -17,34 +17,11 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/xxl-job-executor-example/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-example/src/main/resources/xxl-job-executor.properties index 769c72e0b30df072948138e9404c4ee28c5183c8..62146a9472e7031867ba5043f5fd0f3d89de1934 100644 --- a/xxl-job-executor-example/src/main/resources/xxl-job-executor.properties +++ b/xxl-job-executor-example/src/main/resources/xxl-job-executor.properties @@ -7,4 +7,5 @@ xxl.job.db.password=root_pwd ### xxl-job executor address xxl.job.executor.appname=xxl-job-executor-example xxl.job.executor.ip= -xxl.job.executor.port=9999 \ No newline at end of file +xxl.job.executor.port=9999 +xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/ \ No newline at end of file