- 使用
org.apache.log4j
类记录测试用例,并生成日志
public class Log {
private final Class<?> clazz;
private Logger logger;
static String projectRootPath = new File(System.getProperty("user.dir")).getPath().concat("/");
static String src = "test-output/log";
//设置日期格式
static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//获取当前日期
static String date = dateFormat.format(new Date()).toString();
public Log(Class<?> clazz) {
this.clazz = clazz;
//Logger.getLogger的方法是调用的是LogManager.getLogger()方法,所以这两个方法都是返回logger
this.logger = Logger.getLogger(this.clazz);
Log.initlog4j();
System.out.println(System.getProperty("user.dir"));
}
//初始化log4j,设置log4j的配置文件log4j.Properties
private static void initlog4j() {
//创建Propderties对象
Properties prop = new Properties();
/*Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
log4j.rootLogger=日志级别,appender1, appender2, ….,需在控制台输入,只需将其中一个appender定义为stdout即可*/
prop.setProperty("log4j.rootLogger", "INFO,CONSOLE,E,F");
prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
/* log4j.appender.appender1.layout=org.apache.log4j. PatternLayout(可以灵活的指定布局格式)*/
prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
/*log4j.appender.appender1.layout.ConversionPattern=日志输出格式
例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。 */
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
/*projectRootPath + src = "/Users/gele/intellijj/test-output/log"*/
File dir = new File(projectRootPath + src);
String filepath = dir.getAbsolutePath() + "/" + "log_" + date + ".log";
/*log4j.appender.appender1=org.apache.log4j.FileAppender(文件)日志输出到文件中*/
prop.setProperty("log4j.appender.E", "org.apache.log4j.FileAppender");
/*log4j.appender.appender1.File=文件目录及文件*/
prop.setProperty("log4j.appender.E.file", filepath);
prop.setProperty("log4j.appender.E.layout", "org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.E.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
prop.setProperty("log4j.appender.F", "org.apache.log4j.FileAppender");
String filepathHtml = dir.getAbsolutePath() + "/" + "log_" + date + ".html";
prop.setProperty("log4j.appender.F.file", filepathHtml);
prop.setProperty("log4j.appender.F.layout", "org.apache.log4j.HTMLLayout");
//prop.setProperty("log4j.appender.F.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");
PropertyConfigurator.configure(prop);
}
public void info(String message) {
logger.info(message);
}
public void warn(String message) {
logger.warn(message);
}
public void error(String message) {
logger.error(message);
}
public void debug(String message) {
logger.debug(message);
}
}
关于这段代码可以参考以下文章以及一个github项目。源码来自于此项目。
https://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html
https://github.com/Hyiran/AppiumXM
以下是我写的关于这个自建的Log类的TestNG测试类,便于更好的理解
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class testterlog{
Log lo = new Log(testterlog.class);
public testterlog(){
lo.warn("hello dalele");
}
@Test
public void f()
{
testterlog iu = new testterlog();
}
}
最后在控制台输出
image.png
test-output下出现了设置的log文件
image.png
html文件最终展示效果如下:
image.png
网友评论