Log4j 的简单配置使用

一、log4j的简介

   1. Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

  2.Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。

 3.日志的级别

       日志的级别有:TRACE、DEBUG、INFO、ERROR、WARN、FATAL或者我们自己定义的级别,级别由低到高如下:

        TRACE:等级最低,用于将这些等级的日志都写入到日志中。

        DEBUG:一般用于细粒度级别上,对调试应用程序非常有帮助。

       INFO: 一般和在粗粒度级别上,强调应用程序的运行全程。

        ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行。

        WARN: 表明会出现潜在的错误情形。

        FATAL:指出每个严重的错误事件将会导致应用程序的退出。

    2.配置日志信息输出目的地

        log4j.appender.appenderName = fully.qualified.name.of.appender.class

        (1)org.apache.log4j.ConsoleAppender(控制台)

        (2)org.apache.log4j.FileAppender(文件)

        (3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

        (4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

        (5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

    3.配置日志信息的格式

        log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

      (1)org.apache.log4j.HTMLLayout(以HTML表格形式布局),

       (2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

      (3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

      (4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

       配置具体的日志信息格式

    如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:

    %m 输出代码中指定的消息;

   %M 输出打印该条日志的方法名;

   %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;

   %r 输出自应用启动到输出该log信息耗费的毫秒数;

   %c 输出所属的类目,通常就是所在类的全名;

   %t 输出产生该日志事件的线程名;

   %n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;

  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},     输出类似:2002-10-18 22:10:28,921;

   %l 输出日志事件的发生位置,及在代码中的行数;

  [QC]是log信息的开头,可以为任意字符,一般为项目简称。

如:log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

则会打印出:[framework] 2018-11-15 11:10:49,068 - org.apache.jsp.Log4jTest_jsp -2    [http-nio-8080-exec-2] DEBUG org.apache.jsp.Log4jTest_jsp  - this is debug

二、使用示例

1.目录结构

  

2.首先导如log4j的包

3.配置log4j的配置文件,如下:

log4j.rootLogger=DEBUG,CONSOLE,FILE,LF5_APPENDER
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

log4j.addivity.org.apache=true


###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d{yyyy-MM-dd HH:mm:ss} - %c -%-4r [%t] %-10p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n


#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
#用绝对路径
#log4j.appender.FILE.File=D:/test.log
#用相对路径,apppath已在contextlistener中设置过了
log4j.appender.FILE.File=${apppath}/log/file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis



########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%
t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n


########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000


########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
[email protected]
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
[email protected]
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


########################
# JDBC Appender
#######################
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r
#[%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

 

3.LogUtils

package com.testlog4j.util;

import org.apache.log4j.Logger;

public class LogUtil {
  private static Logger logger;
  private static LogUtil util;
  
  static {
	  logger = Logger.getLogger(LogUtil.class);
  }
  
  public Logger getLogger() {
	  return  logger;
  }
  
  public static LogUtil getInstance() {
	  if(util==null) {
		  util = new LogUtil();
	  }
	  return util;
  }
  
}

   4.测试

<body>
<%
 LogUtil.getInstance().getLogger().debug("this is debug");
LogUtil.getInstance().getLogger().info("this is info");
LogUtil.getInstance().getLogger().warn("this is warn");
LogUtil.getInstance().getLogger().error("this is error");

//第一个getLogger()是自己在LogUtil类中写的,第二个是log4j自带的,传入本类名,以便在打印时看到是这个类打印出来的
LogUtil.getInstance().getLogger().getLogger(this.getClass()).debug("this is debug");
%>
</body>

输出到控制台的日志信息

输出到文件的日志信息

输出到Log Factor 5 Appender

猜你喜欢

转载自blog.csdn.net/qq_40348465/article/details/84038171