1. log4j的一些基本概念
1.1 Logger
- static Level DEBUG
- static Level INFO
- static Level WARN
- static Level ERROR
- static Level FATAL
另外,还有两个可用的特别的日志记录级别:
- static Level ALL
- static Level OFF
Logger logger = Logger.getLogger(MyClass.class);
用下面方法设置级别:
logger.setLevel((Level)Level.WARN);
日志记录器(Logger)将只输出那些级别高于或等于它的级别的信息。
1.2 Appender
-
ConsoleAppender:使用用户指定的布局(layout) 输出日志事件到System.out或者 System.err。默认的目标是System.out。
-
DailyRollingFileAppender 扩展FileAppender,因此多个日志文件可以以一个用户选定的频率进行循环日志记录。
-
FileAppender 把日志事件写入一个文件
-
RollingFileAppender 扩展FileAppender备份容量达到一定大小的日志文件。
-
WriterAppender根据用户的选择把日志事件写入到Writer或者OutputStream。
-
SMTPAppender 当特定的日志事件发生时,一般是指发生错误或者重大错误时,发送一封邮件。
-
SocketAppender 给远程日志服务器(通常是网络套接字节点)发送日志事件(LoggingEvent)对象。
-
SocketHubAppender 给远程日志服务器群组(通常是网络套接字节点)发送日志事件(LoggingEvent)对象。
-
SyslogAppender给远程异步日志记录的后台精灵程序(daemon)发送消息。
-
TelnetAppender 一个专用于向只读网络套接字发送消息的log4j appender。
1.3 Layout
-
HTMLLayout 格式化日志输出为HTML表格。
-
PatternLayout 根据指定的 转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转换模式。
-
SimpleLayout 以一种非常简单的方式格式化日志输出,它打印级别 Level,然后跟着一个破折号“-“ ,最后才是日志消息。
以上三段对log4j的介绍,出自http://blog.csdn.net/wlq1983/article/details/2827638
2. log4j的典型应用
2.1 简单日志写入文件
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
public class Simpandfile {
static Logger logger = Logger.getLogger(Simpandfile.class);
public static void main(String args[]) {
Layout layout = new SimpleLayout();
Appender appender = null;
try {
appender = new FileAppender(layout, "MyLog.log", false);//false表示不追加写日志
//在控制台输出log信息
//appender = new ConsoleAppender(layout,ConsoleAppender.SYSTEM_ERR);
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
int i = 1/0;
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(),e);
}
}
}
2.2 RollingFileAppender
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import java.net.URL;
public class InitUsingXMLPropertiesFile implements Runnable {
private static Logger logger = Logger.getLogger(InitUsingXMLPropertiesFile.class);
//构造函数,初始化log4j
public InitUsingXMLPropertiesFile(){
String resource = "logConfiguration.xml";
URL configFileResource = InitUsingXMLPropertiesFile.class.getResource(resource);
DOMConfigurator.configure(configFileResource.getFile());
}
public static void main(String argv[]) {
InitUsingXMLPropertiesFile initUsingXMLPropertiesFile = new InitUsingXMLPropertiesFile();
initUsingXMLPropertiesFile.write();
}
public static void write() {
// Add a bunch of logging statements ...
logger.debug("Hello, my name is Homer Simpson.");
logger.info("We are the Simpsons!");
logger.warn("Mmm...forbidden donut.");
logger.error("Dear Baby, Welcome to Dumpsville. Population: you.");
try {
int i=1/0;
} catch (Exception e) {
// TODO: handle exception
logger.error(e.getMessage(),e);
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration>
<appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 配置日志记录文件 -->
<param name="File" value="Indentify-Log.txt"/>
<param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%p] - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="DailyRollingFileAppender"/>
</root>
</log4j:configuration>
log4j输出格式控制: http://dolphin-ygj.iteye.com/blog/312504