一、
java jar包如下:
disruptor-3.3.4.jar
geronimo-j2ee-management_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
hawtbuf-1.11.jar
log4j-api-2.13.0.jar
log4j-core-2.13.0.jar
log4j-over-slf4j-1.7.26.jar
log4j-slf4j-impl-2.13.0.jar
slf4j-api-1.7.26.jar
二、编写
LogHelper
注意:
加载 log4j2_client.xml后,再实例化 logger。否则, 记载不到。
matlab中调用initLog4j(String configFile,String logPath)
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.logging.log4j.core.config.Configurator;
/**
* 日志 工具类
*
*/
public class LogHelper {
private static Logger log = null;
/**
* 初始化 log 4j
*
*/
public static void initLog4j(){
createLogDir();
logConfig();
}
/**
* 初始化 log 4j
*
*/
public static void initLog4j(String configFile){
createLogDir();
logConfig(configFile);
}
/**
* 初始化 log 4j
*
*/
public static void initLog4j(String configFile,String logPath) {
System.setProperty("LOGDIR", logPath);
createLogDir(logPath+"/log");
logConfig(configFile);
}
/**
* 创建日志目录, 默认 log
*
*/
public static void createLogDir(){
createLogDir("log");
}
/**
* 创建日志目录, 指定默认目录
*
*/
public static void createLogDir(String path){
File file = new File(path);
if( !file.exists() || !file.isDirectory()){
FileUtils.createDir(file);
}
}
/**
* 加载 log 4j 配置文件,默认 log4j.xml
*
*/
public static void logConfig(){
System.setProperty("LOGDIR", ".");
String log4j2Path = log4j2Path();
if (null != log4j2Path) {
logConfigLog4j2("configuration/log4j2_client.xml");
}
}
/**
* 检查log4j2_client.xml是否存在
* @return
*/
public static String log4j2Path() {
String path = System.getProperty("user.dir");
String filePath =
path + File.separator + "configuration" + File.separator + "log4j2_client.xml";
return filePath;
}
/**
* 加载 log 4j 配置文件,指定默认配置
*
*/
public static void logConfig(String configFile){
if (configFile.indexOf("log4j2") > -1) {
logConfigLog4j2(configFile);
}
}
/**
* 加载 log 4j2 配置文件,指定默认配置
*
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public static void logConfigLog4j2(String configFile){
try {
File file = new File(configFile);
Class clazz = Class.forName("org.apache.logging.log4j.core.config.ConfigurationSource");
Constructor c = clazz.getConstructor(InputStream.class);
//获取有参构造
org.apache.logging.log4j.core.config.ConfigurationSource source =
(org.apache.logging.log4j.core.config.ConfigurationSource) c
.newInstance(new FileInputStream(file));
Configurator.initialize(null, source);
log = LogManager.getLogger(LogHelper.class);
} catch (Throwable e) {
System.out.println("加载log4j2日志配置文件失败");
e.printStackTrace();
}
}
/**
* 输出Info级别日志信息
*
*/
public static void logInfo(String msg){
log.info(msg);
}
/**
* 输出Debug级别日志信息
*
*/
public static void logDebug(String msg){
log.debug(msg);
}
/**
* 输出Warn级别日志信息
*
*/
public static void logWarn(String msg) {
log.warn(msg);
}
/**
* 输出Error级别日志信息
*
*/
public static void logError(String msg) {
log.error(msg);
}
}
三、
matlab jarext 删除 slf4j文件夹、log4j.jar
1、否则,matlab 先加载以上文件,报错:
log4j:WARN No appenders could be found for logger (com.rootnet.util.LogHelper).
log4j:WARN Please initialize the log4j system properly.
2、但删除后,启动matlab报错,不过不影响log4j2的使用。
ERROR: Error starting reference:file:/C:/Program Files/MATLAB/R2015b/java/jar/cmlink/implementations/git.jar (org.osgi.framework.BundleException: Activator start error in bundle com.mathworks.cmlink [28].)
java.lang.NoClassDefFoundError: org/apache/log4j/Appender
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.mathworks.util.osgi.ServicesActivator.registerServicePair(ServicesActivator.java:58)
at com.mathworks.util.osgi.ServicesActivator.parseServices(ServicesActivator.java:38)
at com.mathworks.util.osgi.ServicesActivator.start(ServicesActivator.java:33)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:589)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1458)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:984)
at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:263)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Appender
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
… 10 more