matlab 2015 升级 log4j2详细步骤

一、
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值