`
taolei0628
  • 浏览: 20950 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

简单的Logger工具类

阅读更多
简单的基于java.util.logging.logger的工具类,详细内容见注释。

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.reflect.Reflection;

/*
 * @author tl 2011-4-4
 * 
 * 日志工具类,定义了一些常用方法,注释中包含一些建议的使用方式,可以任意修改和使用。
 */

public abstract class LogEnv
{
    private static final Level newLevel(String name,int l)
    {
        return new Level(name,l){};
    }
    /*
     * 习惯了用log4j,java.util.logging定义的Level不习惯,
     * 同时也要根据实际需要定义更多的Level
     */
    public static final Level ERROR = newLevel("ERROR",950);
    public static final Level IO_ERR = newLevel("IO_ERR",850);
    public static final Level DEBUG = newLevel("DEBUG",650);
    public static final Level DEV = newLevel("DEV",1000);
    public static final Level SERVICE_ERR = newLevel("SERVICE_ERR",890);

    /*
     * 建议的logger定义方式:
     *        static final Logger logger = LogEnv.getLogger();
     * 使用logger以class为单位,不会有太多logger。
     * 也不要太吝啬,不同的源文件最好不要共用logger,否则难以定位log信息的输出源文件。 
     * 不要定义成private,否则在内部类/匿名类里使用logger时编译器会在外部class上多定义一个隐含方法。
     * 
     * 使用了sun.reflect.Reflection这个类,不保证在其他JVM或以后的版本可以使用,
     * 但通过Thread.getStackTrace()同样可以获得CallerClass
     */
    public static Logger getLogger()
    {
        return getLogger(Reflection.getCallerClass(2));
    }
    public static Logger getLogger(String name)
    {
        return Logger.getLogger(name);
    }
    public static Logger getLogger(Class<?> cls)
    {
        return getLogger(cls.getName());
    }
    
    /*
     * 没有声明异常的方法也可能抛出异常,
     * 或者方法没有声明的异常(包括非Runtime的Exception)也可能会抛出
     * 必要的地方要捕获这种异常。
     * 
     */
    public static void unexpectedException(Logger logger,Throwable ex)
    {
        logger.log(ERROR,"Unexpected exception: "+ex,ex);
    }
    
    
    public static void logErr(Logger logger,Throwable ex)
    {
        logger.log(ERROR,String.valueOf(ex),ex);
    }
    
    /*
     * 在服务器端会有大量的Socket相关的IO异常,正常运行状态下可以不输出,
     * 不要直接吞掉任何异常,必要时应可以输出到日志。
     */
    public static void logIOErr(Logger logger,Throwable ex)
    {
        Level level = (ex instanceof IOException)?IO_ERR:ERROR;
        if(logger.isLoggable(level))
            logger.log(level,String.valueOf(ex),ex);
    }
    
    /*
     * 服务器端处理请求时可能会以异常的形式处理应答的错误信息,但很多情况下
     * 由于安全或协议限制,返回给客户端的错误信息不会包含异常的堆栈信息,
     * 必要时需要在服务器端记录异常的堆栈信息。
     */
    public static void logServiceErr(Logger logger,Throwable ex)
    {
        logger.log(SERVICE_ERR,String.valueOf(ex),ex);
    }
    
    /*
     * 使用logger尽量不要影响性能,Log的Level在DEBUG以及更低级别的时候
     * 要先判断该Level的Log是否被输出。
     *       if(logger.isLoggable(LogEnv.DEBUG))
     *           LogEnv.debug(...);
     */
    public static void debug(Logger logger,Object msg,Throwable ex)
    {
        logger.log(DEBUG,String.valueOf(msg),ex);
    }
    
    /*
     * 仅在开发过程中输出的log,为了进一步减少系统的性能和资源损耗,
     * 建议用预编译的方式输出Log
     *     public static final boolean DEVELOP = true;

     *        if(DEVELOP) LogEnv.dev(...)
     * 开发完成后把DEVELOP设成false,编译器会忽略掉这部分代码。
     */
    public static void dev(Logger logger,Object msg,Throwable ex)
    {
        logger.log(DEV,String.valueOf(msg),ex);
    }
}

分享到:
评论

相关推荐

    Logger工具类

    `Logger`工具类通常是指Java的`java.util.logging.Logger`,它是Java内置的日志框架提供的核心类。这个工具类允许我们以不同级别(如SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST)记录日志,方便后期分析...

    简单的logger类

    本文将详细介绍一个名为“简单的logger类”的实现,它支持自动创建文件来存储日志信息。 首先,我们需要理解日志记录的基本概念。日志记录允许程序员在程序执行过程中记录事件和信息,这有助于调试、性能分析和故障...

    android 日志工具类

    在Android开发中,日志工具类(通常称为`Logger`)是开发者进行调试和问题排查的重要工具。Android系统提供了一个内置的日志系统,允许开发者输出不同级别的日志信息,包括`VERBOSE`、`DEBUG`、`INFO`、`WARN`、`...

    C# Logger C# 的日志工具

    在C#编程环境中,C# Logger 是一个受到Apache log4j项目启发的日志工具,旨在提供高效、灵活的日志管理功能。 C# Logger 设计的核心理念是层次化和可配置性,这使得它能够适应各种开发需求。通过这个工具,开发者...

    JAVA版简单日志工具类

    本项目提供了一个简单的日志工具类,适用于那些不需要复杂日志管理的小型项目。下面将详细介绍这个日志工具类的设计理念、功能以及如何使用。 1. **设计理念** - **简洁易用**:为了满足小项目的需求,这个日志...

    java Ffmpeg 工具类 java Ffmpeg 工具类 java Ffmpeg 工具类

    logger.info("转换前的路径:"+oldPath); logger.info("转换后的路径:"+newFilePath); AudioAttributes audio = new AudioAttributes(); audio.setCodec("libmp3lame"); //音频编码格式 audio.setBitRate(8000); ...

    Gson工具类JsonUtils

    JsonUtils是一个基于Gson的工具类,它扩展了Gson的功能,提供了一种更便捷的方式来转换Java对象到JSON字符串,以及从JSON字符串反序列化回Java对象。这个工具类还支持泛型和任意类型的转换,极大地简化了开发过程。 ...

    Java常用工具类.zip

    7. **日志管理工具类**:Java的标准日志框架是`java.util.logging.Logger`,但它功能相对简单。更强大的有Log4j、SLF4J(Simple Logging Facade for Java)和Logback,它们提供了更灵活的日志配置和更丰富的日志级别...

    Java常用工具类大全,工作5年精心整理.zip

    "Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...

    日志工具类-java实现

    在Java编程中,日志工具类的实现是一个非常重要的部分,尤其在开发复杂项目时,良好的日志系统能够帮助开发者追踪程序运行状态、定位错误、分析性能等。本篇文章将详细探讨如何创建一个自定义的日志工具类,以便在...

    Logger日志工具使用

    "Logger日志工具使用"这个主题,指的是如何有效地利用特定的日志库来记录应用程序运行时的信息。在这个Eclipse版本的开源项目中,我们可以找到一个强大的日志工具,它可能是基于Java的log4j、logback或者是其他的...

    java常用的工具类实现

    在Java编程中,工具类(Util Classes)是包含各种实用方法的类,它们不与特定对象绑定,而是提供通用的功能。这些工具类极大地提升了代码的复用性和可维护性。以下是一些Java中常用工具类的详细介绍: 1. **String*...

    JAVA开发常用工具类

    在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法通常用于执行特定的、重复的任务,以提高代码的重用性和效率。这些工具类不依赖于实例化,而是通过调用静态方法来提供服务。下面我们将...

    Android JNI日志工具类

    为了简化这个过程,我们可以创建一个特定的日志工具类,就像“Android JNI日志工具类”所描述的那样。 这个工具类的目标是消除每次需要打印日志时都要手动编写`android_print_info`的繁琐工作。通常,`android_...

    Android日志工具类

    Android系统内置了`Log`类,但为了更好地管理和组织日志输出,通常会自定义一个日志工具类,如本案例中的`Logger`。这个工具类通常会提供更丰富的功能,比如分类、颜色标记、打印堆栈轨迹等,以提升日志的可读性和...

    java常用的工具类

    这些工具类通常包含了各种实用方法,覆盖了字符串处理、集合操作、数学计算、日期时间操作等多个方面。下面将详细阐述Java中常见的工具类及其重要知识点。 1. **Apache Commons Lang**: Apache Commons Lang是一个...

    java,redis,jedis操作工具类,自己写的简易 demo

    包含的`Test`文件可能是对这个工具类的单元测试,通过模拟不同的场景来验证工具类的功能是否正常,比如设置键值对、读取数据、删除数据等。 7. **扩展性** 除了基础操作外,Jedis还支持发布订阅、事务、lua脚本等...

    Java自定义日志工具类

    Java自定义日志工具类是Java开发中一个重要的实践,它可以帮助开发者记录应用程序运行过程中的信息,便于调试、排查问题和后期分析。日志工具类通常包含多种级别(如DEBUG, INFO, WARN, ERROR, FATAL)以适应不同...

    多线程时间记录logger类

    在IT领域,多线程时间记录logger类是一个关键的工具,尤其在开发高效并发系统时。这个logger类设计用于在多线程环境下记录程序运行的时间信息,帮助开发者追踪和优化性能。下面我们将深入探讨相关知识点。 1. **多...

    java工具类

    Java工具类是Java编程中非常重要的组成部分,它们提供了一系列便捷的方法,帮助开发者高效地完成日常开发任务。在Java中,工具类通常是静态方法的集合,无需实例化对象就能直接调用,大大提高了代码的可复用性和开发...

Global site tag (gtag.js) - Google Analytics