提交 7102a9f8 authored 作者: xueli.xue's avatar xueli.xue

任务日志取出slf4j依赖

上级 b4fd8bf9
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<!-- slf4j --> <!-- slf4j -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.21</version> <version>1.7.21</version>
</dependency> </dependency>
......
...@@ -31,6 +31,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe ...@@ -31,6 +31,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
private int port = 9999; private int port = 9999;
private String appName; private String appName;
private RegistHelper registHelper; private RegistHelper registHelper;
public static String logPath;
public void setIp(String ip) { public void setIp(String ip) {
this.ip = ip; this.ip = ip;
...@@ -44,6 +45,9 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe ...@@ -44,6 +45,9 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
public void setRegistHelper(RegistHelper registHelper) { public void setRegistHelper(RegistHelper registHelper) {
this.registHelper = registHelper; this.registHelper = registHelper;
} }
public void setLogPath(String logPath) {
this.logPath = logPath;
}
// ---------------------------------- job server ------------------------------------ // ---------------------------------- job server ------------------------------------
private NetComServerFactory serverFactory = new NetComServerFactory(); private NetComServerFactory serverFactory = new NetComServerFactory();
......
package com.xxl.job.core.handler; package com.xxl.job.core.handler;
import com.xxl.job.core.biz.model.ReturnT; 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 * remote job handler
* @author xuxueli 2015-12-19 19:06:38 * @author xuxueli 2015-12-19 19:06:38
*/ */
public abstract class IJobHandler { 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 * job handler
......
package com.xxl.job.core.handler.impl; package com.xxl.job.core.handler.impl;
import com.xxl.job.core.biz.model.ReturnT; 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.glue.GlueTypeEnum;
import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.log.XxlJobFileAppender; import com.xxl.job.core.log.XxlJobFileAppender;
...@@ -35,17 +36,17 @@ public class ScriptJobHandler extends IJobHandler { ...@@ -35,17 +36,17 @@ public class ScriptJobHandler extends IJobHandler {
String scriptFileName = null; String scriptFileName = null;
if (GlueTypeEnum.GLUE_SHELL == glueType) { if (GlueTypeEnum.GLUE_SHELL == glueType) {
cmd = "bash"; 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) { } else if (GlueTypeEnum.GLUE_PYTHON == glueType) {
cmd = "python"; 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 // make script file
ScriptUtil.markScriptFile(scriptFileName, gluesource); ScriptUtil.markScriptFile(scriptFileName, gluesource);
// log file // log file
String logFileName = XxlJobFileAppender.filePath.concat(XxlJobFileAppender.contextHolder.get()); String logFileName = XxlJobExecutor.logPath.concat(XxlJobFileAppender.contextHolder.get());
// invoke // invoke
int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params); int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params);
......
package com.xxl.job.core.log; package com.xxl.job.core.log;
import com.xxl.job.core.biz.model.LogResult; import com.xxl.job.core.biz.model.LogResult;
import org.apache.log4j.AppenderSkeleton; import com.xxl.job.core.executor.XxlJobExecutor;
import org.apache.log4j.Layout; import org.slf4j.Logger;
import org.apache.log4j.spi.LoggingEvent; import org.slf4j.LoggerFactory;
import java.io.*; import java.io.*;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -13,18 +13,13 @@ import java.util.Date; ...@@ -13,18 +13,13 @@ import java.util.Date;
* store trigger log in each log-file * store trigger log in each log-file
* @author xuxueli 2016-3-12 19:25:12 * @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 // for JobThread
public static ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 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 * log filename: yyyy-MM-dd/9999.log
* *
...@@ -35,7 +30,7 @@ public class XxlJobFileAppender extends AppenderSkeleton { ...@@ -35,7 +30,7 @@ public class XxlJobFileAppender extends AppenderSkeleton {
public static String makeLogFileName(Date triggerDate, int logId) { public static String makeLogFileName(Date triggerDate, int logId) {
// filePath/ // filePath/
File filePathDir = new File(filePath); File filePathDir = new File(XxlJobExecutor.logPath);
if (!filePathDir.exists()) { if (!filePathDir.exists()) {
filePathDir.mkdirs(); filePathDir.mkdirs();
} }
...@@ -52,20 +47,31 @@ public class XxlJobFileAppender extends AppenderSkeleton { ...@@ -52,20 +47,31 @@ public class XxlJobFileAppender extends AppenderSkeleton {
return logFileName; 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) { if (logFileName==null || logFileName.trim().length()==0) {
return; return;
} }
File logFile = new File(filePath, logFileName); File logFile = new File(XxlJobExecutor.logPath, logFileName);
if (!logFile.exists()) { if (!logFile.exists()) {
try { try {
logFile.createNewFile(); logFile.createNewFile();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); logger.error(e.getMessage(), e);
return; return;
} }
} }
...@@ -75,46 +81,26 @@ public class XxlJobFileAppender extends AppenderSkeleton { ...@@ -75,46 +81,26 @@ public class XxlJobFileAppender extends AppenderSkeleton {
FileOutputStream fos = null; FileOutputStream fos = null;
try { try {
fos = new FileOutputStream(logFile, true); fos = new FileOutputStream(logFile, true);
fos.write(layout.format(event).getBytes("utf-8")); fos.write(appendLog.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.flush(); fos.flush();
} finally { } finally {
if (fos != null) { if (fos != null) {
try { try {
fos.close(); fos.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); logger.error(e.getMessage(), e);
} }
} }
} }
} catch (Exception 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 * support read log-file
*
* @param logFileName * @param logFileName
* @return log content * @return log content
*/ */
...@@ -124,7 +110,7 @@ public class XxlJobFileAppender extends AppenderSkeleton { ...@@ -124,7 +110,7 @@ public class XxlJobFileAppender extends AppenderSkeleton {
if (logFileName==null || logFileName.trim().length()==0) { if (logFileName==null || logFileName.trim().length()==0) {
return new LogResult(fromLineNum, 0, "readLog fail, logFile not found", true); 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()) { if (!logFile.exists()) {
return new LogResult(fromLineNum, 0, "readLog fail, logFile not exists", true); return new LogResult(fromLineNum, 0, "readLog fail, logFile not exists", true);
...@@ -145,13 +131,13 @@ public class XxlJobFileAppender extends AppenderSkeleton { ...@@ -145,13 +131,13 @@ public class XxlJobFileAppender extends AppenderSkeleton {
} }
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); logger.error(e.getMessage(), e);
} finally { } finally {
if (reader != null) { if (reader != null) {
try { try {
reader.close(); reader.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); logger.error(e.getMessage(), e);
} }
} }
} }
...@@ -195,7 +181,7 @@ public class XxlJobFileAppender extends AppenderSkeleton { ...@@ -195,7 +181,7 @@ public class XxlJobFileAppender extends AppenderSkeleton {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
return null; return null;
} }
......
package com.xxl.job.core.util; 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.CommandLine;
import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.PumpStreamHandler; import org.apache.commons.exec.PumpStreamHandler;
...@@ -28,7 +28,7 @@ public class ScriptUtil { ...@@ -28,7 +28,7 @@ public class ScriptUtil {
*/ */
public static void markScriptFile(String scriptFileName, String content) throws IOException { public static void markScriptFile(String scriptFileName, String content) throws IOException {
// filePath/ // filePath/
File filePathDir = new File(XxlJobFileAppender.filePath); File filePathDir = new File(XxlJobExecutor.logPath);
if (!filePathDir.exists()) { if (!filePathDir.exists()) {
filePathDir.mkdirs(); filePathDir.mkdirs();
} }
......
...@@ -24,13 +24,13 @@ import java.util.concurrent.TimeUnit; ...@@ -24,13 +24,13 @@ import java.util.concurrent.TimeUnit;
@Service @Service
public class DemoJobHandler extends IJobHandler { public class DemoJobHandler extends IJobHandler {
private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class); private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);
@Override @Override
public ReturnT<String> execute(String... params) throws Exception { public ReturnT<String> execute(String... params) throws Exception {
logger.info("XXL-JOB, Hello World."); super.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
logger.info("beat at:{}", i); super.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2); TimeUnit.SECONDS.sleep(2);
} }
return ReturnT.SUCCESS; return ReturnT.SUCCESS;
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
<property name="dataSource" ref="xxlJobDataSource" /> <property name="dataSource" ref="xxlJobDataSource" />
</bean> </bean>
</property> </property>
<property name="logPath" value="${xxl.job.executor.logpath}" />
</bean> </bean>
<!-- ********************************* "XXL-JOB公共数据源" 配置, 仅在启动 "DbRegistHelper" 时才需要, 否则可删除 ********************************* --> <!-- ********************************* "XXL-JOB公共数据源" 配置, 仅在启动 "DbRegistHelper" 时才需要, 否则可删除 ********************************* -->
......
...@@ -17,34 +17,11 @@ ...@@ -17,34 +17,11 @@
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/> <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
</layout> </layout>
</appender> </appender>
<appender name="xxl-job" class="com.xxl.job.core.log.XxlJobFileAppender">
<param name="filePath" value="/data/applogs/xxl-job/jobhandler/"/>
<!--<param name="append" value="true"/>-->
<!--<param name="encoding" value="UTF-8"/>-->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
</layout>
</appender>
<logger name="com.xxl.job.core" additivity="false">
<level value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
<appender-ref ref="xxl-job"/>
</logger>
<logger name="com.xxl.job.executor.service.jobhandler" additivity="false">
<level value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
<appender-ref ref="xxl-job"/>
</logger>
<root> <root>
<level value="INFO" /> <level value="INFO" />
<appender-ref ref="CONSOLE" /> <appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" /> <appender-ref ref="FILE" />
<appender-ref ref="xxl-job"/>
</root> </root>
</log4j:configuration> </log4j:configuration>
\ No newline at end of file
...@@ -7,4 +7,5 @@ xxl.job.db.password=root_pwd ...@@ -7,4 +7,5 @@ xxl.job.db.password=root_pwd
### xxl-job executor address ### xxl-job executor address
xxl.job.executor.appname=xxl-job-executor-example xxl.job.executor.appname=xxl-job-executor-example
xxl.job.executor.ip= xxl.job.executor.ip=
xxl.job.executor.port=9999 xxl.job.executor.port=9999
\ No newline at end of file xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论