在有了Position类和接口类之后,我们是不是立刻就要着手开始写实现类了呢?按照一般的顺序是这样。但是,我们这里先停一下。原因有二:
1)既然是写一个框架,我们希望总体的功能上是全面的。实现类中,我们需要设计和实现各种具体的操作方法。那么,如果中间出了问题,我们希望能够有所记录(log),所以需要有一个Log类。
2)既然是需要记录,我们希望能够在每次测试的测试报告中,体现该次测试操作的记录。那么,就需要对所做的测试进行监听,所以我们也需要一个监听(Listener)的类。
在写log类之前,我们需要在项目中导入log4j的jar包,具体的下载地址:https://mvnrepository.com/artifact/log4j/log4j
在导入log4j-1.2.17.jar的包后,我们开始着手写Log类。
packagewebui.xUtils;importjava.io.File;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Properties;importorg.apache.log4j.Logger;importorg.apache.log4j.PropertyConfigurator;public classlogUtil {private final Class>clazz;privateLogger logger;//这里是定义logUtil的构造函数,因为不明确需要记录log的类是什么样子的,所以使用泛型Class> clazz
public logUtil(Class>clazz) {this.clazz =clazz;this.logger = Logger.getLogger(this.clazz);
logUtil.initlog4j();
}//定义记录log的方法
private static voidinitlog4j() {//创建Propderties对象
Properties prop = newProperties();/*Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!级别后面是输出端*/prop.setProperty("log4j.rootLogger", "INFO,CONSOLE,E,F");
prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "[%d{YYYY-MM-dd HH:mm:ss,SSS}] %-5p %c %m%n");//设置日志输出的路径String src= "test-output/log";//设置日期格式
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");//获取当前日期,并根据当前的日期建立文件夹,将生成的.log文件放入当前日期的文件夹。
String date=dateFormat.format(newDate()).toString();
File dir= new File(src+"/"+date);if (!dir.exists()){
dir.mkdirs();
}
String filepath=dir.getAbsolutePath()+"/"+"log_"+date+".log";
prop.setProperty("log4j.appender.E","org.apache.log4j.FileAppender");
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");
prop.setProperty("log4j.appender.file.encoding","UTF-8");//生成Html格式的日志,并将生成的.html的日志文件放入当前日期的文件夹。
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 voidinfo(String message) {
logger.info(message);
}public voiddebug(String message) {
logger.debug(message);
}public voiderror(String message) {
logger.error(message);
}public voidtrace(String message) {
logger.trace(message);
}
}
到此,log类就算完成了。在使用的时候,直接定义一个实例来调用相应的方法即可。例如: logUtil logs = new logUtil(X.class);
另外,除了logUtil中定义的样式,在需要记录的地方,可以调用该类中相应的方法,比如logs.info("测试开始"),那么在执行相应程序的时候,这段话就会被记录在log文件中。这样,就方便我们自己定义log的内容了。