log4j 是 Apache 的一开源项目,通过使用 log4j,程序员可以控制日志的输出级别,以及日志信息输送的目的地,包括控制台。文件等,还可以控制每一条日志的输出格式。
下面配置log4j 文件:
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file mylog.log ### log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=c:/log/log.txt log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=info, stdout ,file
1.输出级别(标灰的地方)
log4j.rootLogger= error, stdout ,file
输出优先级别 fatal > error > warn > info > debug
日志记录器(Logger) 将只输出那些级别高于或等于它的信息。例如,级别为 error,将只输出 fatal 、error 级别的日志信息。
2.日志输出目的地 Appender (标灰的地方)
log4j.rootLogger=error, stdout ,file
其中,stdout、file 指的是日志输出的目的地的名字。
log4j允许记录日志到多个输出目的地,一个输出目的地被称为一个Appender。log4j 中常用的 Appender 有以下两种
》ConsoleAppender : 输出日志事件到控制台。通过 Targer 属性配置输出到 System.out 或 System.err,默认的目标是 System.out。
》FileAppenter : 输出日志事件到一个文件。通过 File 属性配置文件的路径及名称。
在上面的试例当中有两个 Appender,第一个命名为 stdout,使用了 ConsoleAppender,通过配置 Target 属性,把日志信息写到控制台 System.out;第二个 Appender 命名为 file,使用了 FileAppender,通过配置File属性,把日志信息写到指定文件log.txt中。
3.日志布局类型 Layout
Appender 必须使用一个与之相关联的布局类型 Layout,用来指定它的输出样式。log4j 中最常用的 Layout 有以下三种 。
》HTMLLayout:格式化日志输出为 HTML 表格。
》SimpleLayout :以一种非常简单的方式格式化日志输出,它输出级别 Level,然后跟着一个破折号“——”,最后是日志消息。
》patternLayout:根据指定的转换模式格式化日志输出,从而支持丰富多样的输出格式。需要配置 layout。ConversionPattern属性,若没有配置该属性,则使用默认的转换模式。
4.转换模式 Conversionpattern
对于 PatternLayout,需要配置 layout.ConversionPattern 属性,常用的配置参数及含义如下:
》%d :用来设置输出日志的日期和时间,默认格式为ISO8601。也可以在其后制定格式,比如 %d{yyyy-MM-dd HH:mm:ss }
》%m:用来输出代码中指定的信息。
》%n:用来输出一个回车换行符。
》%l:用来输出日志事件的反生位置,包括类名、发生的线程,以及在代码中的行数。
》%p:用来输出优先级,即 debug 、info 、warn 、 error 、fatal 等。
》%F:用来输出文件名。
》%M:用来输出方法名。
一个简单小例子:
首先导入jar 包:
import java.util.Scanner; import org.apache.log4j.Logger; public class MyTest_log4j { static Logger logger=Logger.getLogger(MyTest_log4j.class); public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入除数:"); int num1=input.nextInt(); System.out.println("请输入被除数:"); int num2=input.nextInt(); try { System.out.println(String.format("%d /%d =%d", num1,num2,num1/num2)); } catch (Exception e) { logger.error("除数不能为0"); } } }