记录: 一个实用的log4jUtil类:
import java.io.File; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * <pre> * File name : LogUtil.java * Created on : 2007-11-2 10:10:01 * Description : 日志工具类 * @author Jonathan Wong * </pre> */ public class LogUtil { public static final String LOG4J_PROPERTIES = "log4j.properties"; public static final String LOG_FOLDER = "log"; //日志目录,系统启动时自动创建 public static final String ERROR_LOG = "error.log"; private static Log log; private static ThreadLocal<Object> threadFlag = new ThreadLocal<Object>(); static { init(); } /** * 初始化 */ private static void init() { try { createLogFolder(); redirectSystemErrInfo(); info("LogUtil initialized!"); } catch(Throwable t) { warn("System error info redirect failed!"); } } /* * 创建日志文件目录 */ private static void createLogFolder() { File logFolder = new File(LOG_FOLDER); boolean isLogFolderCreated = logFolder.mkdir(); if(isLogFolderCreated) info(LOG_FOLDER + " folder created! " + logFolder.getAbsolutePath()); } /* * 将系统错误信息重定向到文件 * 这里文件主要记录的是运行时非预期的异常。 */ private static void redirectSystemErrInfo() throws Throwable { Properties properties = new Properties(); properties.load(LogUtil.class.getClassLoader().getResourceAsStream(LOG4J_PROPERTIES)); String errLogFileName = properties.getProperty(ERROR_LOG); PrintStream oldErrPS = System.err; PrintStream errPS = createNewErrPS(errLogFileName, oldErrPS); System.setErr(errPS); info("Redirect SystemErrInfo successfully!"); } private static PrintStream createNewErrPS(String errLogFileName, final PrintStream oldErrPS) throws Throwable { return new PrintStream(new FileOutputStream(errLogFileName)) { @Override public void println(String x) { super.println(x); oldErrPS.println(x); } @Override public void println(Object x) { super.println(x); oldErrPS.println(x); } }; } /* * 取得日志实例 * @return */ private synchronized static Log getLog() { if(log == null) log = LogFactory.getLog(LogUtil.class); return log; } /** * 严重错误(1/6) * 非常严重的错误,导致系统中止。 * @param msg */ public static void fatal(Object msg) { getLog().fatal(constructMsg(msg)); } /** * 非预期的运行时错误(2/6) * 其它运行期错误或不是预期的条件。 * @param msg */ public static void error(Object msg) { getLog().error(constructMsg(msg)); } /** * 警告(3/6) * 使用了不赞成使用的API、非常拙劣使用API, '几乎就是'错误, 其它运行时不合需要和不合预期的状态但还没必要称为 "错误"。 * @param msg */ public static void warn(Object msg) { getLog().warn(constructMsg(msg)); } /** * 一般信息(4/6) * 运行时产生的有意义的事件。 * @param msg */ public static void info(Object msg) { getLog().info(constructMsg(msg)); } /** * 调试信息(5/6) * 系统流程中的细节信息,一般正常运行时不被打印。 * @param msg */ public static void debug(Object msg) { getLog().debug(constructMsg(msg)); } /** * 更细节的调试信息(6/6) * 比debug更加细节的信息,一般正常运行时不被打印。 * @param msg */ public static void trace(Object msg) { getLog().trace(constructMsg(msg)); } /** * 一般捕获的异常信息 * 所有捕获到的异常务必调用此方法处理,无需 e.printStackTrace() 。 * @param e */ public static void exception(Exception e) { exception(e.getMessage(), e); } public static void exception(Object msg, Exception e) { getLog().info(constructExceptionMsg(msg), e); } /* * 构造异常日志信息 */ private static String constructExceptionMsg(Object msg) { return constructMsg("Exception:" + String.valueOf(msg)); } /* * 构造完整的日志信息 */ private static String constructMsg(Object msg) { StringBuffer cMsg = new StringBuffer(); //1.DEBUG 模式下的附加信息 constructMsgForDebug(cMsg); //2.添置FLAG标记下的附加信息 constructMsgForFlag(cMsg); //3.主体信息 cMsg.append(msg); return cMsg.toString(); } @SuppressWarnings("unchecked") private static void constructMsgForDebug(StringBuffer cMsg) { if(getLog().isDebugEnabled()) { try { Class locationInfoCls = Class.forName("org.apache.log4j.spi.LocationInfo"); Object locationInfo = locationInfoCls.getConstructor(Throwable.class, String.class).newInstance(new Throwable(), LogUtil.class.getName()); cMsg.append("["); cMsg.append(locationInfoCls.getMethod("getClassName", (Class [])null).invoke(locationInfo, (Object [])null)); cMsg.append(":"); cMsg.append(locationInfoCls.getMethod("getLineNumber", (Class [])null).invoke(locationInfo, (Object [])null)); cMsg.append("] "); } catch(Exception e) { warn("Could not log with line number and class name, maybe org.apache.log4j.spi.LocationInfo not found!"); exception(e); } } } private static void constructMsgForFlag(StringBuffer cMsg) { Object flag = threadFlag.get(); if(flag != null) { cMsg.append("( "); cMsg.append(flag); cMsg.append(" ) "); } } /** * 释放当前线程日志标记 */ public static void releaseFlag() { threadFlag.remove(); } /** * 给当前线程日志创建一个标记 * @param flag */ public static void setFlag(Object flag) { threadFlag.set(flag); } public static boolean isDebugEnabled() { return getLog().isDebugEnabled(); } public static boolean isTraceEnabled() { return getLog().isTraceEnabled(); } public static Log getLog(Class clazz) throws Exception { return LogFactory.getLog(clazz); } public static Log getLog(String name) throws Exception { return LogFactory.getLog(name); } }
相关推荐
7. 日志记录:Hutool 的 LogUtil 工具类提供了日志记录的功能,能够自动识别日志实现的日志门面。 8. 脚本执行:Hutool 的 ScriptUtil 工具类提供了脚本执行的功能,例如执行 Javascript 代码。 9. 设置配置:...
`LogUtil`是一个常见的自定义工具类,用于方便地管理和控制应用程序中的日志输出。它可以帮助开发者更加灵活地控制日志的开关,避免在发布版本中打印过多的日志信息,从而提高应用性能并保护敏感数据的安全。下面...
`LogUtil`就是这样一个工具类,它能够帮助开发者在开发和发布阶段方便地管理日志的输出。 `LogUtil`通常包含以下功能: 1. **开关控制**:`LogUtil`会有一个全局的开关变量,例如`DEBUG`,用于控制是否开启日志...
22. **Log工具类**:如`LogUtil`,提供定制化的日志打印功能,便于调试。 23. **地理位置工具类**:如`LocationUtil`,获取和处理GPS或网络位置信息。 24. **权限请求工具类**:如`RxPermissions`,结合RxJava进行...
Java日志工具LogUtil是Java开发中常见的自定义日志工具类,它的主要特点是不依赖任何第三方的日志框架,如Log4j、Logback或SLF4J等。这种独立性使得开发者在某些特定场景下,例如轻量级应用、嵌入式系统或者对依赖...
5. **LogUtil**: 日志打印工具类,用于调试和追踪代码运行过程。它可以自定义日志级别,标签,以及是否显示堆栈跟踪信息,帮助开发者更好地理解程序运行状态。 6. **ViewUtil**: 视图操作工具类,包含了诸如查找...
`Log4jForAndroid`和`LogUtil`是两个常见的日志工具类,它们扩展了Android原生的日志系统,提供了更强大、更灵活的日志记录功能。下面将详细探讨这两个工具类以及它们在Android开发中的应用。 首先,`Log4j`是Java...
4. **LogUtil**:自定义的日志打印工具类,可以定制日志级别、添加标签,方便调试和分析程序运行状态。 5. **NetWorkUtil**:网络状态检测工具类,检查网络连接是否可用,区分WIFI和移动数据,有助于在网络不稳定时...
在Android开发过程中,工具类(Util Classes)是程序员经常使用的代码模块,它们包含了各种实用功能,可以帮助开发者更高效地编写代码。"android工具类"这个主题涵盖了从UI操作到网络请求,再到数据处理等多个方面的...
LogUtil LogUti工具类 ArrayUtils 数组工具类,提供一些有关数组的便捷方法 ByteUtils 字节工具类,提供一些有关字节的便捷方法 CheckAdapter 选择适配器 CheckingUtils 提供常用数据验证的工具类,不符合的话就抛...
`Log4jForAndroid`和`LogUtil`是两个常见的日志工具类,它们帮助开发者以更高效、更有序的方式记录应用程序运行时的信息。本篇文章将深入探讨这两个工具类,并提供如何在Android项目中使用它们的相关知识。 首先,`...
8. **日志打印工具类**:为了调试和追踪问题,开发者常会自定义日志打印工具类,如LogUtil,支持打印不同的日志级别,并可配置开关,便于在正式发布时关闭日志输出。 9. **异常处理工具类**:用于捕获和处理全局的...
本压缩包文件主要包含了一个基于Log4j的Android日志打印工具类`Log4jForAndroid`和一个自定义的日志工具类`LogUtil`,它们都是为了提升日志记录和分析的效率和质量。 首先,`Log4jForAndroid`是Log4j的一个移植版本...
这个工具类提供了轻量级且高效的日志打印功能,使得开发者可以在不增加过多性能负担的情况下,获取到项目运行的详细信息。 描述中提到"使用方法和xutil一样",意味着logutil可能采用了与xutil库相似的API设计,便于...
在Android应用开发中,工具类(Utils类)是开发者经常使用的辅助代码集合,它们封装了各种通用功能,以便在项目中方便地复用。在这个"Android快速开发系列"中,我们将探讨10个非常实用的工具类,这些工具类可以帮助...
假设我们有一个`LogUtil`工具类,包含静态方法`logInfo(String tag, String msg)`,用于打印日志。在代码中,我们可以直接这样使用: ```java LogUtil.logInfo("MainActivity", "App启动"); ``` 这样不仅减少了...
标题为“LogUtil记录机器生产状态log的类C#编写”的项目,就是这样一个专门用于记录生产环境数据的日志类库。 首先,`LogUtil`类通常会包含一系列静态方法,这些方法用于在不同的事件或条件下记录信息。例如,它...
总结,`LogUtil`工具类的创建使得日志管理更加方便,不仅能够实时查看日志,还可以将重要的日志信息持久化到本地,便于后续分析和排查问题。在实际项目中,可以根据需求对这个工具类进行扩展,提升开发效率和问题...