【Java学习笔记】日志操作

简介:

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/archive/2012/12/17/2822260.html,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
14天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
4天前
|
Java Android开发
java利用xml-rpc协议操作wordpress博客
java利用xml-rpc协议操作wordpress博客
10 1
|
14天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(&lt;https://www.sojump.com/m/2792226.aspx/&gt;)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
24 0
|
14天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之在DataWorks中设置了一个任务节点的调度时间,并将其发布到生产环境,但到了指定时间(例如17:30)却没有产生运行实例和相关日志如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
31 0
|
2天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
16 4
|
3天前
|
Java API
Java操作elasticsearch
Java操作elasticsearch
7 0
|
3天前
|
NoSQL Java Redis
在Java中操作Redis
在Java中操作Redis
7 0
|
3天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
4天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
5天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
9 0