日志可以帮我们记录操作过程,可以用于debug,非常好用
创建
创建没什么好说的,粘代码:
Logger logger= Logger.getLogger(String);//创建了名为logger的日志,这里String一般为你当前的类的名字
级别
logger的每条日志都有对应的级别,logger自己也有级别,只有高于或等于logger的级别的日志才能显示
级别:
SEVERE(最高值)
WARNING
INFO
CONFIG
FINE
FINER
FINEST(最低值)
logger的级别默认为INFO,当然我们可以通过下面语句调整logger级别:
logger.setLevel(Level.WARNING); //这下调到了WARNING级别
我们记录每条日志时都是根据级别来写的:
log.info("first log"); //记录了一条info级别内容为first log的信息
log.warning("second log"); //记录了一条warning级别内容为second log的信息
写入文件
使用Log时要为它添加Handler好输入到其他地方,这里用Filehander
Handler fh = new FileHandler("文件路径");
fh.setFormatter(new SimpleFormatter());//设置格式
fh.setEncoding("UTF-8");//设置编码,不然可能出现乱码
logger.addHandler(fh);//logger可以记录到文件中了
如果不想要控制台输出了,粘上,说白了把以前的hander关掉:
logger.setUseParentHandlers(false);
格式
一般你可以使用SimpleFormatter,
当然,你想自己设计格式也是可以的,写个新类继承Formatter类
public class newFormat extends Formatter{
@Override
public String format(LogRecord record) {
return record.getLevel() + ":" + record.getMessage() + "\n";//这里返回要记录的日志字符串
}
}
当然设置格式的时候就new新类,注意这里是改文件中日志的格式
fh.setFormatter(new newFormat());
最后看看格式是否满足要求,完成:
用法
我们一般在发生错误和成功完成操作的时候记录日志,因为创建一个日志需要很多行代码,我这里就创建一个类用于创建日志,用委托实现日志创建:
public class logtest {
private Logger logger= Logger.getLogger("logtest");
private FileHandler fh = null;
public logtest() {
try {
logger.setUseParentHandlers(false);
fh=new FileHandler("路径",true);
fh.setFormatter(new newFormat());
try {
fh.setEncoding("UTF-8");
} catch (SecurityException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
logger.addHandler(fh);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public Logger getLogger() {//调用这个获得logger
return logger;
}
}
然后我们这里为软件构造系列(九)的最后代码添加日志
Logger logger = new logtest().getLogger();//创建logger
while(true) {
Scanner reader = new Scanner(System.in);
String string = reader.next();
Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
Matcher matcher = pattern.matcher(string);
try {
if(!matcher.matches()) throw new FormatException(string);
logger.info("succeed");//成功记录信息
System.out.println("succeed");
} catch (FormatException e) {
logger.warning(e.getMessage());//失败记录警告
System.out.println(e.getMessage());
}
}
当然也完全可以用静态的log,我们在使用前初始化一次就够了:
public class Logtest {
static Logger myLogger = Logger.getLogger(Logtest.class.getName());
public Logtest() {//用构造器初始化
try {
Handler handler =new FileHandler("D://test.txt");
handler.setEncoding("UTF-8");
handler.setFormatter(new SimpleFormatter());
myLogger.addHandler(handler);
myLogger.setUseParentHandlers(false);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
还是为上面添加log:
new Logtest();//初始化一次就行了
while(true) {
Scanner reader = new Scanner(System.in);
String string = reader.next();
Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
Matcher matcher = pattern.matcher(string);
try {
if(!matcher.matches()) throw new FormatException(string);
myLogger.info("succeed");//成功记录信息
System.out.println("succeed");
} catch (FormatException e) {
myLogger.warning(e.getMessage());//失败记录警告
System.out.println(e.getMessage());
}
}