Browse Source

任务日志取出slf4j依赖

xueli.xue 8 years ago
parent
commit
7102a9f86d

+ 1 - 1
xxl-job-core/pom.xml View File

40
 		<!-- slf4j -->
40
 		<!-- slf4j -->
41
 		<dependency>
41
 		<dependency>
42
 			<groupId>org.slf4j</groupId>
42
 			<groupId>org.slf4j</groupId>
43
-			<artifactId>slf4j-log4j12</artifactId>
43
+			<artifactId>slf4j-api</artifactId>
44
 			<version>1.7.21</version>
44
 			<version>1.7.21</version>
45
 		</dependency>
45
 		</dependency>
46
 
46
 

+ 4 - 0
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java View File

31
     private int port = 9999;
31
     private int port = 9999;
32
     private String appName;
32
     private String appName;
33
     private RegistHelper registHelper;
33
     private RegistHelper registHelper;
34
+    public static String logPath;
34
 
35
 
35
     public void setIp(String ip) {
36
     public void setIp(String ip) {
36
         this.ip = ip;
37
         this.ip = ip;
44
     public void setRegistHelper(RegistHelper registHelper) {
45
     public void setRegistHelper(RegistHelper registHelper) {
45
         this.registHelper = registHelper;
46
         this.registHelper = registHelper;
46
     }
47
     }
48
+    public void setLogPath(String logPath) {
49
+        this.logPath = logPath;
50
+    }
47
 
51
 
48
     // ---------------------------------- job server ------------------------------------
52
     // ---------------------------------- job server ------------------------------------
49
     private NetComServerFactory serverFactory = new NetComServerFactory();
53
     private NetComServerFactory serverFactory = new NetComServerFactory();

+ 15 - 0
xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java View File

1
 package com.xxl.job.core.handler;
1
 package com.xxl.job.core.handler;
2
 
2
 
3
 import com.xxl.job.core.biz.model.ReturnT;
3
 import com.xxl.job.core.biz.model.ReturnT;
4
+import com.xxl.job.core.log.XxlJobFileAppender;
5
+import org.slf4j.Logger;
6
+import org.slf4j.LoggerFactory;
4
 
7
 
5
 /**
8
 /**
6
  * remote job handler
9
  * remote job handler
7
  * @author xuxueli 2015-12-19 19:06:38
10
  * @author xuxueli 2015-12-19 19:06:38
8
  */
11
  */
9
 public abstract class IJobHandler {
12
 public abstract class IJobHandler {
13
+	private static Logger logger = LoggerFactory.getLogger(IJobHandler.class);
14
+
15
+	/**
16
+	 * append log
17
+	 *
18
+	 * @param appendLog
19
+	 */
20
+	public void log(String appendLog) {
21
+		String logFileName = XxlJobFileAppender.contextHolder.get();
22
+		XxlJobFileAppender.appendLog(logFileName, appendLog);
23
+		logger.info("xxl-job log [{}]: {}", logFileName, appendLog);
24
+	}
10
 	
25
 	
11
 	/**
26
 	/**
12
 	 * job handler
27
 	 * job handler

+ 4 - 3
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java View File

1
 package com.xxl.job.core.handler.impl;
1
 package com.xxl.job.core.handler.impl;
2
 
2
 
3
 import com.xxl.job.core.biz.model.ReturnT;
3
 import com.xxl.job.core.biz.model.ReturnT;
4
+import com.xxl.job.core.executor.XxlJobExecutor;
4
 import com.xxl.job.core.glue.GlueTypeEnum;
5
 import com.xxl.job.core.glue.GlueTypeEnum;
5
 import com.xxl.job.core.handler.IJobHandler;
6
 import com.xxl.job.core.handler.IJobHandler;
6
 import com.xxl.job.core.log.XxlJobFileAppender;
7
 import com.xxl.job.core.log.XxlJobFileAppender;
35
         String scriptFileName = null;
36
         String scriptFileName = null;
36
         if (GlueTypeEnum.GLUE_SHELL == glueType) {
37
         if (GlueTypeEnum.GLUE_SHELL == glueType) {
37
             cmd = "bash";
38
             cmd = "bash";
38
-            scriptFileName = XxlJobFileAppender.filePath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh");
39
+            scriptFileName = XxlJobExecutor.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh");
39
         } else if (GlueTypeEnum.GLUE_PYTHON == glueType) {
40
         } else if (GlueTypeEnum.GLUE_PYTHON == glueType) {
40
             cmd = "python";
41
             cmd = "python";
41
-            scriptFileName = XxlJobFileAppender.filePath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py");
42
+            scriptFileName = XxlJobExecutor.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py");
42
         }
43
         }
43
 
44
 
44
         // make script file
45
         // make script file
45
         ScriptUtil.markScriptFile(scriptFileName, gluesource);
46
         ScriptUtil.markScriptFile(scriptFileName, gluesource);
46
 
47
 
47
         // log file
48
         // log file
48
-        String logFileName = XxlJobFileAppender.filePath.concat(XxlJobFileAppender.contextHolder.get());
49
+        String logFileName = XxlJobExecutor.logPath.concat(XxlJobFileAppender.contextHolder.get());
49
 
50
 
50
         // invoke
51
         // invoke
51
         int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params);
52
         int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params);

+ 30 - 44
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java View File

1
 package com.xxl.job.core.log;
1
 package com.xxl.job.core.log;
2
 
2
 
3
 import com.xxl.job.core.biz.model.LogResult;
3
 import com.xxl.job.core.biz.model.LogResult;
4
-import org.apache.log4j.AppenderSkeleton;
5
-import org.apache.log4j.Layout;
6
-import org.apache.log4j.spi.LoggingEvent;
4
+import com.xxl.job.core.executor.XxlJobExecutor;
5
+import org.slf4j.Logger;
6
+import org.slf4j.LoggerFactory;
7
 
7
 
8
 import java.io.*;
8
 import java.io.*;
9
 import java.text.SimpleDateFormat;
9
 import java.text.SimpleDateFormat;
13
  * store trigger log in each log-file
13
  * store trigger log in each log-file
14
  * @author xuxueli 2016-3-12 19:25:12
14
  * @author xuxueli 2016-3-12 19:25:12
15
  */
15
  */
16
-public class XxlJobFileAppender extends AppenderSkeleton {
16
+public class XxlJobFileAppender {
17
+	private static Logger logger = LoggerFactory.getLogger(XxlJobFileAppender.class);
17
 	
18
 	
18
 	// for JobThread
19
 	// for JobThread
19
 	public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
20
 	public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
20
 	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
21
 	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
21
 	
22
 	
22
-	// trogger log file path
23
-	public static volatile String filePath;
24
-	public void setFilePath(String filePath) {
25
-		XxlJobFileAppender.filePath = filePath;
26
-	}
27
-
28
 	/**
23
 	/**
29
 	 * log filename: yyyy-MM-dd/9999.log
24
 	 * log filename: yyyy-MM-dd/9999.log
30
 	 *
25
 	 *
35
 	public static String makeLogFileName(Date triggerDate, int logId) {
30
 	public static String makeLogFileName(Date triggerDate, int logId) {
36
 
31
 
37
         // filePath/
32
         // filePath/
38
-        File filePathDir = new File(filePath);
33
+        File filePathDir = new File(XxlJobExecutor.logPath);
39
         if (!filePathDir.exists()) {
34
         if (!filePathDir.exists()) {
40
             filePathDir.mkdirs();
35
             filePathDir.mkdirs();
41
         }
36
         }
52
 		return logFileName;
47
 		return logFileName;
53
 	}
48
 	}
54
 
49
 
55
-	@Override
56
-	protected void append(LoggingEvent event) {
50
+	/**
51
+	 * append log
52
+	 *
53
+	 * @param logFileName
54
+	 * @param appendLog
55
+	 */
56
+	public static void appendLog(String logFileName, String appendLog) {
57
+
58
+		// log
59
+		if (appendLog == null) {
60
+			appendLog = "";
61
+		}
62
+		appendLog += "\r\n";
57
 
63
 
58
-		String logFileName = contextHolder.get();
64
+		// log file
59
 		if (logFileName==null || logFileName.trim().length()==0) {
65
 		if (logFileName==null || logFileName.trim().length()==0) {
60
 			return;
66
 			return;
61
 		}
67
 		}
62
-		File logFile = new File(filePath, logFileName);
68
+		File logFile = new File(XxlJobExecutor.logPath, logFileName);
63
 
69
 
64
 		if (!logFile.exists()) {
70
 		if (!logFile.exists()) {
65
 			try {
71
 			try {
66
 				logFile.createNewFile();
72
 				logFile.createNewFile();
67
 			} catch (IOException e) {
73
 			} catch (IOException e) {
68
-				e.printStackTrace();
74
+				logger.error(e.getMessage(), e);
69
 				return;
75
 				return;
70
 			}
76
 			}
71
 		}
77
 		}
75
 			FileOutputStream fos = null;
81
 			FileOutputStream fos = null;
76
 			try {
82
 			try {
77
 				fos = new FileOutputStream(logFile, true);
83
 				fos = new FileOutputStream(logFile, true);
78
-				fos.write(layout.format(event).getBytes("utf-8"));
79
-				if (layout.ignoresThrowable()) {
80
-					String[] throwableInfo = event.getThrowableStrRep();
81
-					if (throwableInfo != null) {
82
-						for (int i = 0; i < throwableInfo.length; i++) {
83
-							fos.write(throwableInfo[i].getBytes("utf-8"));
84
-							fos.write(Layout.LINE_SEP.getBytes("utf-8"));
85
-						}
86
-					}
87
-				}
84
+				fos.write(appendLog.getBytes("utf-8"));
88
 				fos.flush();
85
 				fos.flush();
89
 			} finally {
86
 			} finally {
90
 				if (fos != null) {
87
 				if (fos != null) {
91
 					try {
88
 					try {
92
 						fos.close();
89
 						fos.close();
93
 					} catch (IOException e) {
90
 					} catch (IOException e) {
94
-						e.printStackTrace();
91
+						logger.error(e.getMessage(), e);
95
 					}
92
 					}
96
 				}
93
 				}
97
 			} 
94
 			} 
98
 		} catch (Exception e) {
95
 		} catch (Exception e) {
99
-			e.printStackTrace();
96
+			logger.error(e.getMessage(), e);
100
 		}
97
 		}
101
 		
98
 		
102
 	}
99
 	}
103
 
100
 
104
-	@Override
105
-	public void close() {
106
-		// TODO Auto-generated method stub
107
-		
108
-	}
109
-
110
-	@Override
111
-	public boolean requiresLayout() {
112
-		// TODO Auto-generated method stub
113
-		return false;
114
-	}
115
-	
116
 	/**
101
 	/**
117
 	 * support read log-file
102
 	 * support read log-file
103
+	 *
118
 	 * @param logFileName
104
 	 * @param logFileName
119
 	 * @return log content
105
 	 * @return log content
120
 	 */
106
 	 */
124
 		if (logFileName==null || logFileName.trim().length()==0) {
110
 		if (logFileName==null || logFileName.trim().length()==0) {
125
             return new LogResult(fromLineNum, 0, "readLog fail, logFile not found", true);
111
             return new LogResult(fromLineNum, 0, "readLog fail, logFile not found", true);
126
 		}
112
 		}
127
-		File logFile = new File(filePath, logFileName);
113
+		File logFile = new File(XxlJobExecutor.logPath, logFileName);
128
 
114
 
129
 		if (!logFile.exists()) {
115
 		if (!logFile.exists()) {
130
             return new LogResult(fromLineNum, 0, "readLog fail, logFile not exists", true);
116
             return new LogResult(fromLineNum, 0, "readLog fail, logFile not exists", true);
145
 				}
131
 				}
146
 			}
132
 			}
147
 		} catch (IOException e) {
133
 		} catch (IOException e) {
148
-			e.printStackTrace();
134
+			logger.error(e.getMessage(), e);
149
 		} finally {
135
 		} finally {
150
 			if (reader != null) {
136
 			if (reader != null) {
151
 				try {
137
 				try {
152
 					reader.close();
138
 					reader.close();
153
 				} catch (IOException e) {
139
 				} catch (IOException e) {
154
-					e.printStackTrace();
140
+					logger.error(e.getMessage(), e);
155
 				}
141
 				}
156
 			}
142
 			}
157
 		}
143
 		}
195
 					e.printStackTrace();
181
 					e.printStackTrace();
196
 				}
182
 				}
197
 			}
183
 			}
198
-		} 
184
+		}
199
 		return null;
185
 		return null;
200
 	}
186
 	}
201
 
187
 

+ 2 - 2
xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java View File

1
 package com.xxl.job.core.util;
1
 package com.xxl.job.core.util;
2
 
2
 
3
-import com.xxl.job.core.log.XxlJobFileAppender;
3
+import com.xxl.job.core.executor.XxlJobExecutor;
4
 import org.apache.commons.exec.CommandLine;
4
 import org.apache.commons.exec.CommandLine;
5
 import org.apache.commons.exec.DefaultExecutor;
5
 import org.apache.commons.exec.DefaultExecutor;
6
 import org.apache.commons.exec.PumpStreamHandler;
6
 import org.apache.commons.exec.PumpStreamHandler;
28
      */
28
      */
29
     public static void markScriptFile(String scriptFileName, String content) throws IOException {
29
     public static void markScriptFile(String scriptFileName, String content) throws IOException {
30
         // filePath/
30
         // filePath/
31
-        File filePathDir = new File(XxlJobFileAppender.filePath);
31
+        File filePathDir = new File(XxlJobExecutor.logPath);
32
         if (!filePathDir.exists()) {
32
         if (!filePathDir.exists()) {
33
             filePathDir.mkdirs();
33
             filePathDir.mkdirs();
34
         }
34
         }

+ 3 - 3
xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java View File

24
 @Service
24
 @Service
25
 public class DemoJobHandler extends IJobHandler {
25
 public class DemoJobHandler extends IJobHandler {
26
 	private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);
26
 	private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);
27
-	
27
+
28
 	@Override
28
 	@Override
29
 	public ReturnT<String> execute(String... params) throws Exception {
29
 	public ReturnT<String> execute(String... params) throws Exception {
30
-		logger.info("XXL-JOB, Hello World.");
30
+		super.log("XXL-JOB, Hello World.");
31
 		
31
 		
32
 		for (int i = 0; i < 5; i++) {
32
 		for (int i = 0; i < 5; i++) {
33
-			logger.info("beat at:{}", i);
33
+			super.log("beat at:" + i);
34
 			TimeUnit.SECONDS.sleep(2);
34
 			TimeUnit.SECONDS.sleep(2);
35
 		}
35
 		}
36
 		return ReturnT.SUCCESS;
36
 		return ReturnT.SUCCESS;

+ 1 - 0
xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml View File

36
                 <property name="dataSource" ref="xxlJobDataSource" />
36
                 <property name="dataSource" ref="xxlJobDataSource" />
37
             </bean>
37
             </bean>
38
         </property>
38
         </property>
39
+		<property name="logPath" value="${xxl.job.executor.logpath}" />
39
 	</bean>
40
 	</bean>
40
 
41
 
41
     <!-- ********************************* "XXL-JOB公共数据源" 配置, 仅在启动 "DbRegistHelper" 时才需要, 否则可删除 ********************************* -->
42
     <!-- ********************************* "XXL-JOB公共数据源" 配置, 仅在启动 "DbRegistHelper" 时才需要, 否则可删除 ********************************* -->

+ 0 - 23
xxl-job-executor-example/src/main/resources/log4j.xml View File

17
             <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
17
             <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
18
         </layout>
18
         </layout>
19
     </appender>
19
     </appender>
20
-    
21
-    <appender name="xxl-job" class="com.xxl.job.core.log.XxlJobFileAppender">
22
-        <param name="filePath" value="/data/applogs/xxl-job/jobhandler/"/>
23
-        <!--<param name="append" value="true"/>-->
24
-        <!--<param name="encoding" value="UTF-8"/>-->
25
-        <layout class="org.apache.log4j.PatternLayout">
26
-            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
27
-        </layout>
28
-    </appender>
29
-
30
 
20
 
31
-    <logger name="com.xxl.job.core" additivity="false">
32
-    	<level value="INFO" />
33
-        <appender-ref ref="CONSOLE" />
34
-        <appender-ref ref="FILE" />
35
-        <appender-ref ref="xxl-job"/>
36
-    </logger>
37
-    <logger name="com.xxl.job.executor.service.jobhandler" additivity="false">
38
-    	<level value="INFO" />
39
-        <appender-ref ref="CONSOLE" />
40
-        <appender-ref ref="FILE" />
41
-        <appender-ref ref="xxl-job"/>
42
-    </logger>
43
     <root>
21
     <root>
44
         <level value="INFO" />
22
         <level value="INFO" />
45
         <appender-ref ref="CONSOLE" />
23
         <appender-ref ref="CONSOLE" />
46
         <appender-ref ref="FILE" />
24
         <appender-ref ref="FILE" />
47
-        <appender-ref ref="xxl-job"/>
48
     </root>
25
     </root>
49
 
26
 
50
 </log4j:configuration>
27
 </log4j:configuration>

+ 2 - 1
xxl-job-executor-example/src/main/resources/xxl-job-executor.properties View File

7
 ### xxl-job executor address
7
 ### xxl-job executor address
8
 xxl.job.executor.appname=xxl-job-executor-example
8
 xxl.job.executor.appname=xxl-job-executor-example
9
 xxl.job.executor.ip=
9
 xxl.job.executor.ip=
10
-xxl.job.executor.port=9999
10
+xxl.job.executor.port=9999
11
+xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/