(1)第一种是在配置文件中,进行配置,对指定的类(或者包)都有对应的日志输出到固定的文件里。
使用方式:
a.maven里配置:slf4j-api-1.7.2.jar
b.在resource目录里配置log4j.properties
,配置的内容如下:
#配置根logger,所有的都要输出,第一个是日志输出的级别
log4j.rootLogger=INFO,RollingFile
#配置日志记录的优先级 从高到低一次是 ERROR WARN INFO DEBUG,这里配置为DEBUG,高于DEBUG的所有级别都会打印
#定义名为log为RollingFile的的输出类型,由于RollingFile配置为rootlogger,因此会将所有的输出日志内容都在RollingFile里重复输出一遍
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=D://logs//root.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n
#RollingFile
log4j.appender.LogTest=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LogTest.File=D://logs//LogTest.log
log4j.appender.LogTest.layout=org.apache.log4j.PatternLayout
log4j.appender.LogTest.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n
#下列为指定的包名,也可以指定对应的类
log4j.logger.com.iqiyi.search.api=INFO,LogTest
测试使用:
package com.iqiyi.search.api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
static Logger logger = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
logger.info("[这是一条测试数据:{}]","test1");
}
}
(2)有时,我们想在多线程环境为每个线程都配置一个日志,这时就不能继续采用第一种方法了,我的解决方法是使用log4j-1.2.17.在代码级别里进行控制。
import org.apache.log4j.*;
public class DataTransferLogger {
private static final String LOGGER_FILE_DIR=ESConfigure.LOGGER_FILE_DIR;
public static Logger getLogger(String name)
{
DailyRollingFileAppender fa = new DailyRollingFileAppender();//每天生成一个日志文件
fa.setName(name);
fa.setFile(LOGGER_FILE_DIR + name);
//监控日志,每天生成一个
fa.setDatePattern("'.'yyyy-MM-dd");
fa.setLayout(new PatternLayout("[%-5p] [%d{yyyy-MM-dd HH:mm:ss}]%m%n"));
fa.setThreshold(Level.INFO);
fa.setAppend(true);
fa.activateOptions();
Logger logger= LogManager.getLogger(name);
logger.addAppender(fa);
return logger;
}
public static Logger getThreadLogger(Long startId,Long endId,boolean isHistory)
{
String prefix="";
if(isHistory)
{
prefix="history-";
}else {
prefix="";
}
String name=prefix+startId+"-"+endId+".log";
DailyRollingFileAppender fa = new DailyRollingFileAppender();
fa.setName(name);
fa.setFile(LOGGER_FILE_DIR + name);
fa.setLayout(new PatternLayout("[%d{yyyy-MM-dd HH:mm:ss}]%m%n"));
//由于生产环境下写入性能较快,设置为每隔一个小时天生成一个文件
fa.setDatePattern("'.'yyyy-MM-dd-HH");
fa.setThreshold(Level.INFO);
fa.setAppend(true);
fa.activateOptions();
Logger logger= LogManager.getLogger(name);
logger.addAppender(fa);
return logger;
}
public static void main(String[] args) {
Logger dlg1=DataTransferLogger.getThreadLogger(1000L,2000L,false);
dlg1.info("aaaaaaaaaaaaaaaaaa");
}
}