软件构造系列(十)Logging日志的使用

日志可以帮我们记录操作过程,可以用于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());  
  } 
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值