以前用 java 做工程需要调试信息都是自己 System.out.println,虽然很早就知道 log4j,不过没认真研究过,一般拿简单的 .property 文件来配置,不过最近仔细看了一下 log4j 的源文件,发现人家 apache 早就不建议使用 .property 了,首选 .xml,于是再研究了一下 .xml 的配置,这里记一下备忘。
-
<?xml version="1.0" encoding="UTF-8" ?>
-
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-
-
-
-
-
<!--
-
%c 输出日志信息所属的类的全名
-
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2008-08-08 20:08:08
-
%f 输出日志信息所属的类的类名
-
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
-
%m 输出代码中指定的信息,如log(message)中的message
-
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
-
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
-
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
-
%t 输出产生该日志事件的线程名
-
-->
-
-
-
-
-
-
<appender name="Log.All.Console" class="org.apache.log4j.ConsoleAppender">
-
<layout class="org.apache.log4j.PatternLayout">
-
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] %C{2} (%F:%L) - %m%n" />
-
</layout>
-
</appender>
-
-
-
-
-
<appender name="Log.All.File" class="org.apache.log4j.FileAppender">
-
<param name="File" value="log/AppRunLog.log" />
-
<param name="Append" value="false" />
-
<param name="Encoding" value="GBK" />
-
<layout class="org.apache.log4j.PatternLayout">
-
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] %C{2} (%F:%L) - %m%n" />
-
</layout>
-
</appender>
-
-
<category name="org.apache.log4j.xml">
-
<priority value="debug" />
-
</category>
-
-
-
<root>
-
<level value="debug" />
-
<appender-ref ref="Log.All.Console" />
-
<appender-ref ref="Log.All.File" />
-
</root>
-
-
</log4j:configuration>
这个 xml 是建好了,不过由于在运行时需要配置 XML,而这个配置 log4j 又限定只能配置一次,所以最简单的办法,就是再次封装一下,写个类来配置和提供 Logger:
-
package xxx.utilities;
-
-
import org.apache.log4j.*;
-
import org.apache.log4j.spi.*;
-
import org.apache.log4j.xml.*;
-
-
-
-
-
-
-
public class Log4jLogger
-
{
-
private static final String r_sProfileName = "log4j.xml";
-
-
static
-
{
-
DOMConfigurator.configure(Log4jLogger.class.getResource(r_sProfileName));
-
}
-
-
private Log4jLogger() {}
-
-
public static String getProfileName() { return r_sProfileName; }
-
-
public static Logger getLogger(Class clsClass)
-
{
-
return LogManager.getLogger(clsClass);
-
}
-
-
public static Logger getLogger(String sClassName)
-
{
-
return LogManager.getLogger(sClassName);
-
}
-
-
public static Logger getLogger(String sClassName, LoggerFactory lfLoggerFactory)
-
{
-
return LogManager.getLogger(sClassName, lfLoggerFactory);
-
}
-
}
这样,在调用的时候就不需要配置了,直接获取 Logger 并输出就 OK 了。
注意最好将 .xml 放到这个 java 类所在的同一目录(当然也可以通过在上述类里面指定路径)。
代码:
-
package xxx;
-
-
import org.apache.log4j.*;
-
-
public class TestLog4j
-
{
-
protected Logger r_l4jlogger = Log4jLogger.getLogger(TestLog4j.class);
-
-
-
r_l4jlogger.error("这里是 DavidHsing 的 log4j 测试。");
-
}
这样就可以正常的运行了。
不过最上面的 xml 只是个例子,真正要研究的话还有很多内容,比如按事件级别分别输出到不同地方等等,总之,log4j 是个很强大而且高效的东东,值得认真研究一下。
参考文献:
1、Apache Logging Project Homepage: http://logging.apache.org
分享到:
相关推荐
这个压缩包包含了一个已经封装好的Log4j实现,使得在项目中集成和使用日志变得更加简便。 首先,我们来看看`log4j.properties`文件。这是Log4j的配置文件,它定义了日志的输出级别、格式、目的地等。例如,你可以...
本文将详细讨论如何将log4cxx封装为通用LOG宏,以及其配置文件的详细内容。 首先,让我们了解log4cxx的基本概念。Log4cxx是基于日志级别(如DEBUG、INFO、WARN、ERROR和FATAL)的,允许我们根据需要调整日志输出的...
### 基于Log4J的日志输出组件设计的关键知识点 #### 1. 引言:日志管理的重要性 在软件开发与系统运行过程中,日志管理占据着至关重要的地位。据统计,在一个软件系统中,日志输出相关的代码量约占总代码量的4%...
而`slf4j.jar` 和 `slf4j-log4j.jar` 则是另一种更高层次的抽象,SLF4J提供了比Commons Logging更好的封装和灵活性,`slf4j-log4j.jar` 则将SLF4J与log4j进行绑定,使得SLF4J可以通过log4j来记录日志。 在实际开发...
在这个“Java8应用封装,手写ORM,LOG,framework”的项目中,开发者显然专注于利用Java8的新特性来构建自己的轻量级框架,包括对象关系映射(ORM)、日志系统(LOG)以及一些通用的工具类和自动化配置。 1. **Java...
这个框架深受Apache的Log4j启发,旨在帮助开发者方便地进行日志输出,便于调试、监控和问题排查。在Log4QT中,我们可以找到一系列的类和接口,用于配置、管理和记录日志信息。下面,我们将深入探讨这些文件的功能和...
《通用数据底层 Jsa4j》是一套基于Java语言编写的源码库,它为开发者提供了在各种场景下处理数据的通用工具和方法。作为Java编程的经典案例,Jsa4j旨在简化数据操作,提高开发效率,使得在复杂的业务逻辑中处理数据...
- **日志系统**:LOG4J2是Apache的一个高性能、灵活的日志框架,比老版本LOG4J具有更好的性能和更多的功能。 - **配置灵活性**:使用JSON或XML配置,提供动态日志级别调整,支持异步日志记录,提高应用性能。 - *...
回到"common-log:通用日志界面",这可能是一个将这些日志库的接口进行封装的项目,使得开发者无需关心底层实现,只需要通过统一的接口就可以进行日志记录。这样的通用日志界面可能包含以下功能: 1. **多日志库支持...
4. `log4j.properties`:日志配置文件,用于控制应用的日志输出级别、格式和目的地。 5. `config`:可能包含项目的配置文件,如数据库连接信息、应用设置等。 6. `META-INF`:Java应用的标准目录,通常包含MANIFEST....
另一个例子是`log4j.jar`,这是一个流行的日志记录框架,可以方便地管理和控制应用程序的日志输出。 创建和使用通用jar包的过程通常包括以下步骤: 1. 开发和测试:编写实现特定功能的Java源代码,进行单元测试以...
标题中的“JDBC链接Oracle数据库增删改查通用工具类”指的是一个Java编程中的实用工具类,它封装了与Oracle数据库交互的JDBC操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)这四种基本...
Log4J以其灵活性和强大的功能而被选中,但针对GHIPS的特定需求,进行了功能封装和数据库扩展等优化,以适应遥感数据处理的特性。优化后的日志子系统能够实现GHIPS的记录和追踪需求,并能便捷地处理大量日志数据,...
7. **日志记录**:为了便于调试和故障排查,DEMO可能会使用日志记录框架,如Log4j或SLF4J,记录程序运行过程中的关键信息。 8. **单元测试**:为了确保接口功能的正确性,DEMO可能包含了JUnit或其他测试框架的使用...
9. **日志和异常处理**:通常会集成日志框架(如Log4j、Logback)和全局异常处理,便于调试和问题排查。 使用该通用Dao框架,开发者只需关注业务逻辑,而无需关心底层的数据库操作和对象映射,极大地提升了开发效率...
3. **日志处理**:集成Logback或Log4j,统一日志管理,便于追踪问题。 4. **异常处理**:全局异常处理,捕获并统一返回错误信息,提高用户体验。 5. **数据库支持**:支持多种数据库,如MySQL、Oracle等,通过JPA或...
可以使用Java的logging框架(如Log4j或java.util.logging)记录网络请求和响应,以帮助诊断问题。同时,Web服务器的日志也能提供有价值的信息。 7. **持续集成与自动化测试**:为了确保Web服务的质量,持续集成和...
齐全的代码注释,完整的hibernate通用方法封装。商业代码的规范。配置好了log4j,并且呢给出一个简单的注册实例。可以说这完全是一个商业项目的基础框架。并且也适合初学者学习使用。 此例中,数据库配置的是mysql,...
可以集成第三方库,如 Timber 或 Log4j,对网络请求进行日志打印,方便调试。 **三、使用封装后的工具类** 使用封装好的工具类 `LouisOkHttp`,只需实例化对象,然后调用相应的方法发起请求,例如: ```java ...
日志框架如Log4j可以帮助我们实现这一目标。 8. **性能优化**: 为了提高系统性能,可以采用缓存技术、批处理操作、减少不必要的数据库查询等方法。例如,使用缓存(如 Ehcache 或 Redis)存储经常访问的数据,可以...