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