整理日志

# Conflicts:
#	src/main/java/com/sunyard/log/SydLogFactory.java
#	src/main/java/com/sunyard/log/SydLogInfo.java
#	src/main/java/com/sunyard/log/SydLogger.java
#	src/main/java/racal/sunyard/main/SydApi4j.java
This commit is contained in:
cheney 2022-10-26 17:19:33 +08:00
parent d7fe309b08
commit d0ea067870
6 changed files with 238 additions and 7 deletions

View File

@ -0,0 +1,5 @@
package com.sunyard.log;
public interface ILogFactory {
ILogger getLogger(Class cls);
}

View File

@ -0,0 +1,11 @@
package com.sunyard.log;
public interface ILogger {
public int getCurrentLogLevel();
public void error(String msg, Object ...params);
public void info(String msg, Object ...params);
public void debug(String msg, Object ...params);
}

View File

@ -0,0 +1,118 @@
package com.sunyard.log;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class SydLogFactory implements ILogFactory {
// 日期格式
private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 日志目录
public static String pcLogPath = "./sydapi-logs/";
// 日志名
public static final String logName = "sydapi-log";
// 日志级别
public static int iLogLevel = 0;
// 日志队列
private static ConcurrentLinkedQueue<SydLogInfo> queue = new ConcurrentLinkedQueue<SydLogInfo>();
// 调试标记
public static boolean debug = false;
// 后台打印进程
private static Executor executor = Executors.newSingleThreadExecutor();
static {
executor.execute(new Runnable() {
@Override
public void run() {
String logFileName = "";
FileOutputStream logFos = null;
while (true) {
try {
if (queue.isEmpty()) {
// 释放 CPU
Thread.sleep(500);
continue;
}
// 有日志
// 确认日期
String mayLogFileName = String.format("%s_%s.log", logName, format.format( new Date()));
if ( ! logFileName.equals( mayLogFileName ) ) {
logFileName = mayLogFileName;
if ( null != logFos ) {
logFos.flush();
logFos.close();
}
File folder = new File( pcLogPath );
if ( ! folder.exists() ) {
folder.mkdirs();
}
File f = new File( pcLogPath, logFileName );
if ( ! f.exists() ) {
f.createNewFile();
}
logFos = new FileOutputStream( f , true);
}
while (!queue.isEmpty()) {
SydLogInfo info = queue.poll();
logFos.write(String.format("[%d:%s <%s-%d>] %s\r\n",
info.getLevel(),
format.format( new Date(info.getDatatime()) ),
info.getTname(),
info.getTid(),
info.getMsg()
).getBytes()
);
}
logFos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeFileOutputStream(logFos);
logFileName = "";
}
}
}
});
}
private static void closeFileOutputStream(FileOutputStream fos){
if ( null != fos ) {
try {
fos.flush();
}catch (Exception e) {
//pass
}
try {
fos.close();
}catch (Exception e) {
//pass
}
}
}
private SydLogFactory() {
}
@Override
public ILogger getLogger(Class cls) {
return new SydLogger(queue);
}
}

View File

@ -0,0 +1,44 @@
package com.sunyard.log;
public class SydLogInfo {
private int level;
private long datatime;
private String tname;
private long tid;
private String msg;
private Object[] objects;
public SydLogInfo(int level, String msg, Object[] objects) {
this.level = level;
this.msg = msg;
this.objects = objects;
this.datatime = System.currentTimeMillis();
this.tname = Thread.currentThread().getName();
this.tid = Thread.currentThread().getId();
}
public int getLevel() {
return level;
}
public long getDatatime() {
return datatime;
}
public String getTname() {
return tname;
}
public long getTid() {
return tid;
}
public String getMsg() {
return msg;
}
public Object[] getObjects() {
return objects;
}
}

View File

@ -0,0 +1,42 @@
package com.sunyard.log;
import java.util.concurrent.ConcurrentLinkedQueue;
public class SydLogger implements ILogger{
private ConcurrentLinkedQueue<SydLogInfo> queue;
SydLogger(ConcurrentLinkedQueue<SydLogInfo> queue) {
this.queue = queue;
}
public void debug(String msg, Object... params) {
if (SydLogFactory.iLogLevel == 3) {
this.queue.add(new SydLogInfo(3, msg, params));
} else {
return;
}
}
public void info(String msg, Object... params) {
if (SydLogFactory.iLogLevel >= 2) {
this.queue.add(new SydLogInfo(2, msg, params));
} else {
return;
}
}
public void error(String msg, Object... params) {
if (SydLogFactory.iLogLevel >= 1) {
this.queue.add(new SydLogInfo(1, msg, params));
} else {
return;
}
}
@Override
public int getCurrentLogLevel() {
return SydLogFactory.iLogLevel;
}
}

View File

@ -8,6 +8,8 @@ import com.sunyard.SydApiException;
import com.sunyard.cert.X509; import com.sunyard.cert.X509;
import com.sunyard.constant.CertUsage; import com.sunyard.constant.CertUsage;
import com.sunyard.entity.Struct; import com.sunyard.entity.Struct;
import com.sunyard.log.ILogFactory;
import com.sunyard.log.ILogger;
import com.sunyard.proto.Packet; import com.sunyard.proto.Packet;
import com.sunyard.proto.PacketSection; import com.sunyard.proto.PacketSection;
import com.sunyard.proto.Util; import com.sunyard.proto.Util;
@ -76,11 +78,16 @@ public class SydApi4j implements SydApi {
} }
} }
private static void delta() { private static ILogFactory logFactory = null;
long m = System.currentTimeMillis(); private static ILogger logger = null;
System.out.print("delta \t");
System.out.println(m - sTime); public static ILogFactory getLogFactory() {
sTime = m; return logFactory;
}
public static void setLogFactory(ILogFactory logFactory) {
SydApi4j.logFactory = logFactory;
SydApi4j.logger = logFactory.getLogger( SydApi4j.class );
} }
@ -1119,14 +1126,18 @@ public class SydApi4j implements SydApi {
if (debug) { if (debug) {
System.out.println(i); System.out.println(i);
} }
if ( null != SydApi4j.logger ) {
SydApi4j.logger.debug( "{}", i );
}
} }
private static void print(Object i) { private static void print(Object i) {
if (debug) { if (debug) {
System.out.print(i); System.out.print(i);
} }
if ( null != SydApi4j.logger ) {
SydApi4j.logger.debug("{}", i );
}
} }
//gc回收 //gc回收