java getlogger_Java util Logger的使用步骤

Java util Logger是java原生的日志生成工具,不需要另外引用类库,使用方便,学习简单,能够在小型应用中灵活使用。下面从实际应用角度,对Logger的使用步骤作出总结,以实现快速掌握。

Logger的使用一般包括以下几个步骤:

一、 定义全局的Logger,在不同的类中共用

关键语句:

Logger myLogger = Logger.getLogger("com.mycompany.myapp");

方法参数是Logger的名称,当名称相同时候,同一个名称的Logger只创建一个,实现各个类中共享。

二、 设定输出媒介控制器(Handler)

共有四步:

一般日志输出包括调试时输出到控制台,以及程序运行时输出到文件,因此Handler包括了控制台ConsoleHandler以及文件FileHandler。

Handler输出的日志格式为默认格式,系统提供的格式包括SimpleFormatter、XMLFormatter等,输出的内容一般比较冗余,不满足使用,最好使用自定义内容输出格式,可使用派生自Formatter类的自定义子类。

设定Handler的输出等级,默认是info级。

将Handler加入到Logger中。

关键语句:

//创建consoleHandler 自定义类实例,用于在控制台发送日志

ConsoleHandler consoleHandler = new ConsoleHandler();

//设置consoleHandler实例输出格式

consoleHandler.setFormatter(new ConsoleLogFormatter());

//加入到Logger中

myLogger.addHandler(consoleHandler);

//不显示系统自带的consoleHandler,否则控制台将发出两条同样的日志

myLogger.setUseParentHandlers(false);

//在工程目录下创建log文件夹

File dir = new File("log");

if(!dir.exists() || !dir.isDirectory())

dir.mkdir();

//创建fileHandler 自定义类实例,用于在文件保存日志

FileHandler fileHandler = new

FileHandler("log\\myapp.%u.%g.txt",1000,2,true);

fileHandler.setFormatter(new FileLogFormatter());

fileHandler.setLevel(Level.INFO);

myLogger.addHandler(fileHandler);

说明 :

创建日志文件前,若没有文件夹,log将会报错,因此在写入日志文件前,检查文件夹是否存在,不存在则创建文件夹。

FileHandler fileHandler = new FileHandler("log\myapp.%u.%g.txt",1000,2,true);

语句意义为:新建FileHandler,地址为工程文件路径下;log\myapp.%u.%g.txt,循环文件编号为%u.%g,文件最大1000字节,2个文件循环,是否追加文件为“是”,否则总为新建文件。

myLogger.setUseParentHandlers(false);

语句意义为:系统自带的consoleHandler设置为不生效,仅生效增加的自定义consoleHandler,否则控制台将发出两条同样的日志。

三、 Logger设置输出等级,并输出日志

关键语句:

myLogger.setLevel(Level.INFO);

myLogger.info("一般信息1 ");

myLogger.info("一般信息2 ");

完整的程序代码为:

public class LogProduce {

public static void main(String[] args) throws IOException {

Logger myLogger = Logger.getLogger("com.mycompany.myapp");

ConsoleHandler consoleHandler = new ConsoleHandler();

consoleHandler.setFormatter(new ConsoleLogFormatter());

myLogger.addHandler(consoleHandler);

myLogger.setUseParentHandlers(false);

File dir = new File("log");

if(!dir.exists() || !dir.isDirectory())

dir.mkdir();

FileHandler fileHandler = new FileHandler("log\\myapp.%u.%g.txt",1000,2,true);

fileHandler.setFormatter(new FileLogFormatter());

fileHandler.setLevel(Level.INFO);

myLogger.addHandler(fileHandler);

myLogger.setLevel(Level.INFO);

myLogger.info("一般信息1 ");

myLogger.info("一般信息2 ");

LogUser logUser1 = new LogUser();

logUser1.produceLog();

}

}

实际输出为;

Console输出:

a072c2c5ac0a

未命名图片.jpg

文件输出:

a072c2c5ac0a

image.png

四、补充说明

ConsoleLogFormatter 和 FileLogFormatter 两个派生的 Formatter 子类

public class FileLogFormatter extends Formatter {

public FileLogFormatter(){

super();

}

@Override

public String format(LogRecord r) {

Date date = new Date();

String sDate = date.toString();

String lineSperator = System.getProperty("line.separator");

StringBuilder sb = new StringBuilder();

sb.append("[" + sDate + "]" + "[" + r.getLevel() +"]");

sb.append(r.getMessage());

//在一条日志结束后采用常量方式的系统换行符,因为 “\n” 形式可能不识别

sb.append(lineSperator);

return sb.toString();

}

}

该子类重写了format方法,用于用户自定义输出,使用StringBuilder类拼装。

关键语句:

String lineSperator = System.getProperty("line.separator");

若直接在格式字符串中插入传统换行符“\n",在输出文件中可能不能识别,因此采用系统定义的换行符 line.separator。

类似的,ConsoleLogFormatter代码为:

public class ConsoleLogFormatter extends Formatter {

public ConsoleLogFormatter(){

super();

}

@Override

public String format(LogRecord r) {

String lineSperator = System.getProperty("line.separator");

StringBuilder sb = new StringBuilder();

sb.append(r.getMessage());

sb.append(lineSperator);

return sb.toString();

}

}

子类中调用Logger

在子类中调用getLogger即可。

public class LogUser {

Logger myLogger = Logger.getLogger("com.mycompany.myapp");

public void produceLog(){

myLogger.info("LogUser.produceLog");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值