slf4j使用的辛酸历程

在官方下载了最新https://www.slf4j.org/download.html

Window系统选择了zip的文件

slf4j使用的辛酸历程_第1张图片

解压后有很多包

slf4j使用的辛酸历程_第2张图片

使用教程:https://www.yiibai.com/slf4j/slf4j_environment_setup.html

slf4j-api-1.7.28.jar包必须有

日志框架可以选择一个,如下图

slf4j使用的辛酸历程_第3张图片

选择slf4j-log4j12-1.7.28.jar 这个包,说明上提示还要使用 log4j.jar,看官方slf4j的解压包里库,以为log4j-over-slf4j-1.7.28.jar库就是所谓的log4j.jar

然后使用,结果 slf4j冲突

Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path

参考https://www.slf4j.org/legacy.html

于是将log4j-over-slf4j-1.7.28.jar库移除

结果异常Failed to instantiate SLF4J LoggerFactory 

参考:http://www.it1352.com/973678.html 说少了log4j.jar库

slf4j使用的辛酸历程_第4张图片

于是又单独搜log4j.jar

找到了apache官网http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip

下载了最新的

slf4j使用的辛酸历程_第5张图片

解压后将最新的log4j-1.2.17.jar加入库

slf4j使用的辛酸历程_第6张图片

结果又出现

log4j:WARN No appenders could be found for logger (TestPubFun).
log4j:WARN Please initialize the log4j system properly.

这个时候网上说要配置log4j.properties或者log4j.xml

参考:http://www.mamicode.com/info-detail-1108072.html

结果配置log4j.properties不起作用,采用log4j.xml生效

slf4j使用的辛酸历程_第7张图片

       
       
          
       
     
           
           
             
             
                   
               
               
            
         	         
                   
                   
                   
               
           
    
    
    	
    	 
              
               
          
         
        
               
               
              
                 
                   
              
            
                   
           
    
    
    
    	
    	 
            
               
               
           
                      
               
               
              
           
          	       
                   
              
            
                   
           
    
     
     	
		
	
	
           
           
               
               
          
                 
           
  

配置logger时

WARN 元素类型为 "logger" 的内容必须匹配 "(param*,level?,appender-ref*)"

 logger节点配置两个以上,有一个additivity="false"里设定appender-ref 节点时,异常消失

 

然后日志打印出来了

slf4j使用的辛酸历程_第8张图片

要将日志写在相对路径下,如上配置代码(注意\,如果写/ 可能logbase失效)

      

java 代码设定logbase对应的目录

protected static Logger logger = LoggerFactory.getLogger(TestPubFun.class);

String rootPath = PubFile.GetAppPath();
		System.setProperty("logbase",rootPath);
		logger.debug(rootPath);

//其中PubFile的方法
public class PubFile {
	
	/*
	 * 获取当前运行程序的完整目录
	 */
	public static String GetAppPath() {
		return System.getProperty("user.dir");
	}

 以下为slf4j简单的封装

package pubFuns;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogHelper {
	/**
	 * 日志的路径,程式运行路径
	 */
	private static String LogPath="";

	/**
   	 * 获取适配日志器,供内部调用
	 * 设定日志路径	
	 * @param className 一般为类名*.class.getName(),其他任意字符串也可以
	 * 主要用于区分日志来源
	 * @return
	 */
	private static Logger getLogger(String className) {	
		if(LogPath=="")
		{
			LogPath = System.getProperty("user.dir");//运行地址
			System.setProperty("logbase",LogPath);
		}
		return LoggerFactory.getLogger(className);
	}

	/**
	 * 打印日志 控制台
	 * @param className
	 * @param msg
	 */
	public static void WriteDebug(String className,String msg) {
		Logger logDebug=getLogger(className);
		if(logDebug.isDebugEnabled())
		{
			logDebug.debug(msg);
		}
	}
	/**
	 * 写异常日志,日志文件为应用启动路径下log文件夹下
	 * @param className
	 * @param msg
	 */
	public static void WriteError(String className,String msg) {
		Logger logError=getLogger(className);
		if(logError.isErrorEnabled())
		{
			logError.error(msg);
		}
	}
	
	/**
	 * 写信息日志文件,,日志文件为应用启动路径下Info文件夹下
	 * @param className
	 * @param msg
	 */
	public static void WriteInfo(String className,String msg) {
		Logger logInfor=getLogger(className);
		if(logInfor.isInfoEnabled())
		{
			logInfor.info(msg);
		}
	}
}

 

 

你可能感兴趣的:(java)