以前用 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的jar放入工程下,直接调用Log4jUtil下面的静态方法就可以了。
齐全的代码注释,完整的hibernate通用方法封装。商业代码的规范。配置好了log4j,并且呢给出一个简单的注册实例。可以说这完全是一个商业项目的基础框架。并且也适合初学者学习使用。 此例中,数据库配置的是mysql,...
Spring 5.0框架自带了通用的日志封装 ...自动检测log4j 2.x, SLF4J, JUL(java.util.Logging)而不是其他的支持 访问Resuouce时提供getFile或和isFile防御式抽象 基于NIO的readableChannel也提供了这个新特性
log4j.appender.appender3.URL=jdbc:mysql://127.0.0.1:3306/doroodo?characterEncoding=UTF-8 ---->日志数据库链接 log4j.appender.appender3.user=root ---->日志数据库用户名 log4j.appender.appender3.password=...
#框架搭建过程> 搭建信息管理与信息系统的框架基础 - 搭建:主要框架组成、通用部分(公共的返回结果封装、公共常量、分页封装) - 框架组成 - spring boot [2.1.RELEASE] ... - log4j2 - logback(默认) -关注点
CMS项目用到的技术:访structs架构,在线文本编辑器,AJAX,LOG4j,里面用到大量的泛型。用到的数据库是MYSQL里面包含28张表使用MVC加三层框架,里面代码重构加通用,比如说分页,用泛型集合在structs封装.用到设计模式有...
IOIF以EXTJS为前端,以Spring、Struts、Hibernate为后端,整合了Proxool、Log4j、Quartz、Oscache、Castor、Memcached、redis等优秀的开源软件。 支持Tomcat6及Resin3等应用服务器,支持Oracle、MYSQL等数据库。IOIF...
IOIF以EXTJS为前端,以Spring、Struts、Hibernate为后端,整合了Proxool、Log4j、Quartz、Oscache、Castor、Memcached、redis等优秀的开源软件。 支持Tomcat6及Resin3等应用服务器,支持Oracle、MYSQL等数据库。IOIF...
import org.apache.log4j.PropertyConfigurator; public class ConfigSQLHelper { protected static Properties pro = null; protected static InputStream is = null; protected static Connection conn = null; ...
<artifactId>log4j-slf4j-impl Redis二次封装的这个项目主要实现了自动延期的功能,可以在配置的时候设置某些缓存是否需要自动延期<默认为ture>,自动延期的将会在获取的时候重置 过期时间来达到自动延期功能。...
<artifactId>slf4j-log4j12 ${slf4j.version} <!-- Mybatis --> <groupId>org.mybatis <artifactId>mybatis ${mybatis.version} <groupId>org.mybatis <artifactId>mybatis-spring ${...
四频 (850 , 900 , 1800 , 1900) ;支持 3G , 802.11b 和 802.11g 。----------------------------------- Android 编程基础 5 互联网 支持 HTTP 、 WAP Push 和 xHTML ;支持 POP 、 IMAP 、 SMTP ,以及 AOL ...