在官方下载了最新https://www.slf4j.org/download.html
Window系统选择了zip的文件
解压后有很多包
使用教程:https://www.yiibai.com/slf4j/slf4j_environment_setup.html
slf4j-api-1.7.28.jar包必须有
日志框架可以选择一个,如下图
选择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库
于是又单独搜log4j.jar
找到了apache官网http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip
下载了最新的
解压后将最新的log4j-1.2.17.jar加入库
结果又出现
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生效
配置logger时
WARN 元素类型为 "logger" 的内容必须匹配 "(param*,level?,appender-ref*)"
logger节点配置两个以上,有一个additivity="false"里设定appender-ref 节点时,异常消失
然后日志打印出来了
要将日志写在相对路径下,如上配置代码(注意\,如果写/ 可能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);
}
}
}