简单的基于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`工具类通常是指Java的`java.util.logging.Logger`,它是Java内置的日志框架提供的核心类。这个工具类允许我们以不同级别(如SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST)记录日志,方便后期分析...
本文将详细介绍一个名为“简单的logger类”的实现,它支持自动创建文件来存储日志信息。 首先,我们需要理解日志记录的基本概念。日志记录允许程序员在程序执行过程中记录事件和信息,这有助于调试、性能分析和故障...
在Android开发中,日志工具类(通常称为`Logger`)是开发者进行调试和问题排查的重要工具。Android系统提供了一个内置的日志系统,允许开发者输出不同级别的日志信息,包括`VERBOSE`、`DEBUG`、`INFO`、`WARN`、`...
在C#编程环境中,C# Logger 是一个受到Apache log4j项目启发的日志工具,旨在提供高效、灵活的日志管理功能。 C# Logger 设计的核心理念是层次化和可配置性,这使得它能够适应各种开发需求。通过这个工具,开发者...
本项目提供了一个简单的日志工具类,适用于那些不需要复杂日志管理的小型项目。下面将详细介绍这个日志工具类的设计理念、功能以及如何使用。 1. **设计理念** - **简洁易用**:为了满足小项目的需求,这个日志...
logger.info("转换前的路径:"+oldPath); logger.info("转换后的路径:"+newFilePath); AudioAttributes audio = new AudioAttributes(); audio.setCodec("libmp3lame"); //音频编码格式 audio.setBitRate(8000); ...
JsonUtils是一个基于Gson的工具类,它扩展了Gson的功能,提供了一种更便捷的方式来转换Java对象到JSON字符串,以及从JSON字符串反序列化回Java对象。这个工具类还支持泛型和任意类型的转换,极大地简化了开发过程。 ...
7. **日志管理工具类**:Java的标准日志框架是`java.util.logging.Logger`,但它功能相对简单。更强大的有Log4j、SLF4J(Simple Logging Facade for Java)和Logback,它们提供了更灵活的日志配置和更丰富的日志级别...
"Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...
在Java编程中,日志工具类的实现是一个非常重要的部分,尤其在开发复杂项目时,良好的日志系统能够帮助开发者追踪程序运行状态、定位错误、分析性能等。本篇文章将详细探讨如何创建一个自定义的日志工具类,以便在...
"Logger日志工具使用"这个主题,指的是如何有效地利用特定的日志库来记录应用程序运行时的信息。在这个Eclipse版本的开源项目中,我们可以找到一个强大的日志工具,它可能是基于Java的log4j、logback或者是其他的...
在Java编程中,工具类(Util Classes)是包含各种实用方法的类,它们不与特定对象绑定,而是提供通用的功能。这些工具类极大地提升了代码的复用性和可维护性。以下是一些Java中常用工具类的详细介绍: 1. **String*...
在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法通常用于执行特定的、重复的任务,以提高代码的重用性和效率。这些工具类不依赖于实例化,而是通过调用静态方法来提供服务。下面我们将...
为了简化这个过程,我们可以创建一个特定的日志工具类,就像“Android JNI日志工具类”所描述的那样。 这个工具类的目标是消除每次需要打印日志时都要手动编写`android_print_info`的繁琐工作。通常,`android_...
Android系统内置了`Log`类,但为了更好地管理和组织日志输出,通常会自定义一个日志工具类,如本案例中的`Logger`。这个工具类通常会提供更丰富的功能,比如分类、颜色标记、打印堆栈轨迹等,以提升日志的可读性和...
这些工具类通常包含了各种实用方法,覆盖了字符串处理、集合操作、数学计算、日期时间操作等多个方面。下面将详细阐述Java中常见的工具类及其重要知识点。 1. **Apache Commons Lang**: Apache Commons Lang是一个...
包含的`Test`文件可能是对这个工具类的单元测试,通过模拟不同的场景来验证工具类的功能是否正常,比如设置键值对、读取数据、删除数据等。 7. **扩展性** 除了基础操作外,Jedis还支持发布订阅、事务、lua脚本等...
Java自定义日志工具类是Java开发中一个重要的实践,它可以帮助开发者记录应用程序运行过程中的信息,便于调试、排查问题和后期分析。日志工具类通常包含多种级别(如DEBUG, INFO, WARN, ERROR, FATAL)以适应不同...
在IT领域,多线程时间记录logger类是一个关键的工具,尤其在开发高效并发系统时。这个logger类设计用于在多线程环境下记录程序运行的时间信息,帮助开发者追踪和优化性能。下面我们将深入探讨相关知识点。 1. **多...
Java工具类是Java编程中非常重要的组成部分,它们提供了一系列便捷的方法,帮助开发者高效地完成日常开发任务。在Java中,工具类通常是静态方法的集合,无需实例化对象就能直接调用,大大提高了代码的可复用性和开发...