【Java学习笔记】日志操作

简介: 作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.简介: ava.util.logging,它可以对程序中的日志记录进行相当复杂的控制。例如:通过它可以指定日志的级别和日志的位置(控制台、文件、套接字、 内存缓冲区),也可以创建子记录器,通过它可以用程序控制的方式来指定想记录的内容,也可以使用配置文件来指定,而不需要去改动程序。

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

1.简介:

ava.util.logging,它可以对程序中的日志记录进行相当复杂的控制。例如:通过它可以指定日志的级别和日志的位置(控制台、文件、套接字、 内存缓冲区),也可以创建子记录器,通过它可以用程序控制的方式来指定想记录的内容,也可以使用配置文件来指定,而不需要去改动程序。

2.体系:

3.实例:

import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Handler;
import java.util.logging.FileHandler;
import java.io.IOException;
public class LogDemo3 {
    static Logger logger = Logger.getLogger("");
    public static void main(String arg[]) {
        try {
            FileHandler fh = new FileHandler("logfile");
            logger.addHandler(fh);
        } catch(IOException e) {
            System.err.println("Cannot open log file for output");
        }
        Handler handler[] = logger.getHandlers();
        for(int i=0; i<handler.length; i++)
            handler[i].setLevel(Level.FINEST);
        logger.setLevel(Level.FINEST);
        LogDemo3 ld = new LogDemo3();
        ld.demonstrate();
    }
    LogDemo3() {
        logger.info("LogDemo3 instantiated.");
    }
    public void demonstrate() {
        logger.fine("Entering the demonstrate method.");
        for(int i=0; i<10; i++) {
            logger.finest("Loop counter: " + i);
        }
        logger.fine("Exiting the demonstrate method.");
    }
}

4.技巧(转载)

java .util .logging 包提供了强大的日志输出功能,正确和有效的使用这些功能需要一些技巧:

  1. 了解不同的Level , Level .FINE , LEVEL .FINER ,LEVEL .FINEST 用来调试和跟踪程序,比如打印一些调试信息,异常等。Level .INFO 将打印信息到控制台。
  2. 使用Logger.isLoggable(Level ) 方法检测当前的Level ,以此来判断是否输出日志,日志也应该遵循需要时才输出的原则,避免生成大量的调试信息字符串,占用系统内存,影响性能。
  3. 必要时程序化的打开和关闭日志,例如在开发程序时开启大部分日志,为了查错和调试程序,在程序发布时关闭大部分日志,避免影响客户和影响程序性能。
  4. 必要时可以针对一个模块使用唯一的Logger ,也就是创建Logger 时传入子模块的名字,所有类使用同一个Logger ,避免生成太多的Logger 实例。
  5. 下边是使用日志工具的一段代码:

package  javatest;
import java .io.IOException;
import java .util .logging .ConsoleHandler;
import java .util .logging .FileHandler;
import java .util .logging .Level ;
import java .util .logging .Logger;
import java .util .logging .SimpleFormatter;
/**
*/
public class  LoggerTest {
//  构建Logger
private static  Logger log  =  Logger.getLogger(LoggerTest. class .getName());
/**  Creates a new instance of LoggerTest  */
public  LoggerTest() {
//  使用此方法避免生成需要输出的字符串
if (log.isLoggable(Level .FINE)) {
            log.log(Level .FINE,  " start constructing... " );
        }
    }
/**
     * 设置指定包的日志输出级别.
     *
     *  @param  packageName 指定的包
     *  @param  fileName 指定日志的输出文件
     *  @param level  日志输出级别
*/
private static void  setLogLevel(String packageName, String fileName, Level level ) {
try  {
            FileHandler fileHandler  = new  FileHandler( " %h/ " + fileName + " %u.log " );
            fileHandler.setFormatter( new  SimpleFormatter());
            ConsoleHandler consoleHandler  = new  ConsoleHandler();
            consoleHandler.setLevel(level );
            Logger.getLogger(packageName).addHandler(fileHandler);
            Logger.getLogger(packageName).addHandler(consoleHandler);
            Logger.getLogger(packageName).setLevel(level );
        }  catch  (SecurityException ex) {
            ex.printStackTrace();
        }  catch  (IOException ex) {
            ex.printStackTrace();
        }
    }    
public static void  main(String[] args) {
//  启用当前包的全部日志输出
        String packageName  = " javatest " ;
        setLogLevel(packageName, packageName, Level .ALL);
        LoggerTest test  = new  LoggerTest();
    }
}

 

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/


               作者:gnuhpc
               出处:http://www.cnblogs.com/gnuhpc/
               除非另有声明,本网站采用知识共享“署名 2.5 中国大陆”许可协议授权。


分享到:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
17天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
73 1
|
1月前
|
存储 Java 数据处理
|
2月前
|
监控 负载均衡 Dubbo
|
1天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
20 3
|
29天前
|
自然语言处理 Java
这是什么操作?java中的变量竟然可以先使用后声明?
这是什么操作?java中的变量竟然可以先使用后声明?
14 0
|
29天前
|
SQL Java
使用java中的String类操作复杂的字符串
使用java中的String类操作复杂的字符串
9 0
|
30天前
|
Java
java操作字符串
java操作字符串
9 1
|
1月前
|
SQL Java 关系型数据库
Java查询操作
Java查询操作
8 0
|
1月前
|
SQL NoSQL Java
【七】springboot整合AOP实现日志操作
【七】springboot整合AOP实现日志操作
41 0
|
1月前
|
存储 前端开发 Java
java学习笔记
java学习笔记
61 0