学习心得:日志文件加入:logging.logger

序言:

1.在软件构造实验四中,要求为 实验三中的程序中添加一个日志,来记录每一步的操作种类等等,以及记录记录错误发生时间,错误类型和异常发生时间,异常类型。由于以前从未接触过日志文件 的方法,所以进行了初步的学习,了解了log4j和 logger 语言之后,使用更加简单易懂的logger 进行日志的添加。

日志:
网络设备、系统及服务程序等,在运作时通常都会产生一个叫log的事件记录;每一行日志都记载着日期、时间、使用者及动作等相关操作的描述。
在我们编写程序的时候,有时也需要记录用户的各种操作、产生的异常和时间,因此需要使用记录日志的工具。常用的日志记录工具有log4j、Java自带的logging等。这篇文章将简略介绍logging工具

logger使用简介

1.logger的分级

logger的常用级别,全部定义在java.util.logging.Level里面。
各级别按降序排列如下:
**SEVERE(最高值)
WARNING
INFO
CONFIG
FINE
FINER
FINEST(最低值)
**此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。
logger默认的级别是INFO,比INFO更低的日志将不显示。
Logger的默认级别定义是在jre安装目录的lib下面。

  Logger logger = Logger.getLogger("log");
        System.out.println("hello world");
        logger.severe("hello world severe");
        logger.warning("hello world warning");
        logger.info("hello world info");
        logger.config("hello world config");
        logger.fine("hello world fine");
        logger.finer("hello world finer");
        logger.finest("hello world finest");

运行结果:
在这里插入图片描述
Logger中的每一个Handler(下文详细介绍)都有一个等级,默认为INFO。如果通过调用低于这一等级的方法输出信息,信息是不会被该Handler输出的。

2.创建一个Logger对象

为指定子系统查找或创建一个 logger

static Logger getLogger(String name) 

为指定子系统查找或创建一个 logger。

static Logger getLogger(String name, String resourceBundleName) 

注意:name是Logger的名称,当名称相同时候,同一个名称的Logger只创建一个。

3. Handler

Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。
可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。
Handler 类通常使用 LogManager 属性来设置 Handler 的 Filter、Formatter 和 Level 的默认值。

举例说明:
控制台控制器: 在控制台中打印日志文件

                ConsoleHandler consoleHandler =new ConsoleHandler(); 
                consoleHandler.setLevel(Level.ALL);
                   log.addHandler(consoleHandler); 

文件控制器:单独设置文件 打印日志

 //文件控制器
                FileHandler fileHandler = new FileHandler("F:/testDir/8888g.log"); 
                fileHandler.setLevel(Level.INFO); 
                log.addHandler(fileHandler); 

4.Formatter

如果使用上文中的代码直接讲handler添加进入log得话,那么输出的日志的形式是以默认的方式输出
如下图
在这里插入图片描述
这时需要用到fomatter来为Log设定 特定形式的日志输出,方便用户提取信息。
Formatter 为格式化 LogRecords 提供支持。
一般来说,每个日志记录 Handler 都有关联的 Formatter。Formatter 接受 LogRecord,并将它转换为一个字符串。
有些 formatter(如 XMLFormatter)需要围绕一组格式化记录来包装头部和尾部字符串。可以使用 getHeader 和 getTail 方法来获得这些字符串。
LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求。
LogRecord(Level level, String msg)用给定级别和消息值构造 LogRecord。
例如:

fileHandler.setFormatter(new Formatter() {//定义一个匿名类
    @Override
    public String format(LogRecord record) {
        return sdf.format(now.getTime()) + record.getMessage()+ ":"+record.getLevel()+"\n";
    }
});

注: sdf.format括号中得格式 按照自己需要进行编写
这样就可以指定格式得将日志输出到文件中。
在这里插入图片描述

5.实际使用过程

(1)创建Logger对象,创建可以是在要记录日志的类中,如果想要在全局的app中定义一个日志,可以单独创建一个类
类得构造方法:


private  Logger log;
private FileHandler fileHandler;
public CreateLog(String Name,String Path){
    log = Logger.getLogger(Name);
    try {
        fileHandler = new FileHandler(Path);
    }catch(IOException e){
        System.out.println("找不到文件!");
    }
    log.addHandler(fileHandler);
}

用以上的创建方式,在app中想要创建一个日志文件,可以直接 以路径作为参数,直接将日志存在指定路径的txt中。
(2)为这个类创建添加日志的方法
针对不同的添加日志的情况编写不同的方法:
比如 记录app的操作日志,和记录app的报错日志,以及程序得异常日志 就可以写成同一日志类下的三种不同方法,这两种方法中为fileHandler设定了不同的日志等级

public void logAction(String message, String type) throws IOException {
    log.setLevel(Level.INFO);
    fileHandler.setLevel(Level.INFO);
    Calendar now =  Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    fileHandler.setFormatter(new Formatter() {//定义一个匿名类
        @Override
        public String format(LogRecord record) {
            return sdf.format(now.getTime()) + record.getMessage()+ ":"+record.getLevel()+"\n";
        }
    });
    System.out.println("日志记录:操作:INFO"+ " <" + message + ">" + "<"+type+">");
    log.log(Level.INFO,"<" + message + ">" + "<"+type+">");
}

先在方法中设定级别 ,再设置时间,使用Calendar 来获取当前系统时间,最后再设定特定格式setFormatter 以文件得形式输出日志。
方法调用:
在app程序中,先将 日志类 delegate到 app类中:

private CreateLog alog = new CreateLog("姓名","路径");

之后在每一个操作时可以直接调用方法

alog.logAction("信息1","信息2");

以上为创建一个简单日志的大致流程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值