log4j在maven项目中的使用

log4j在maven项目中的使用

一、序言

最近在学习MyBatis,在学习过程中需要用到控制台输出sql信息,因此才会有本文。
因本文大部分都是来源于对各文章的总结,也不好说是转载某一人,因此,会有文末的参考。
如非要说侵犯版权,请告知,会及时删除。

什么是log4j?
Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。 log4j是几种Java日志框架之一。

二、log4j在maven中的使用

1.导入依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2.配置log4j

共有三种方法可以配置log4j

方法一:创建log4j.properties

在maven项目的目录结构中,存在resources目录,在这个目录下新建log4j.properties文件。

通过在文件写入一些配置即可。下面是我在控制台输出sql语句的配置

# 全局日志配置
log4j.rootLogger = DEBUG,Console
# MyBatis 日志配置
log4j.logger.Mapper=DEBUG
# 控制台输出
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%5p  - %m%n

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO

方法二:通过XML文件配置

配置示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <!-- 
         appender指定输出目的地,如控制台或文件;
         appender的名称任意
    -->
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
        </layout>
    </appender>
 
    <!-- 
         category(类别)为'org.springframework'的logger只记录level为“info”或更高级别的消息;
         即:如果您使用的类名获取logger(如Logger.getLogger(AClass.class))
         而且AClass是org.springframework包的一部分,则它属于这一category
    -->
    <logger name="org.springframework">
        <level value="info"/>
    </logger>

    <!-- 
         spring的所有日志消息都被设置为“info”等级,但对于类PropertyEditorRegistrySupport,
         我们想将其日志消息设置为“debug”等级
    -->
    <logger name="org.springframework.beans.PropertyEditorRegistrySupport">
        <level value="debug"/>
    </logger>
 
    <logger name="org.acegisecurity">
        <level value="info"/>
    </logger>
    
    
    <root>
        <!-- 
            所有日志消息的级别为“debug”或更高的将被记录,除非另有定义
            所有日志消息将都记录到appender “stdout”中,除非另有定义
        -->
        <level value="debug" />
        <appender-ref ref="stdout" />
    </root>
</log4j:configuration>

方法三:使用Java代码配置

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;


public class TestLog4j {

    private static Logger logger = Logger.getLogger(TestLog4j.class);
    public static void main(String[] a) throws InterruptedException {
        BasicConfigurator.configure();
        logger.setLevel(Level.DEBUG);  //设置显示级别
        logger.trace("跟踪信息"); //所以这里是不会在控制台打印的 
        logger.debug("调试信息");
        logger.info("输出信息");
        Thread.sleep(1000);
        logger.warn("警告信息");
        logger.error("错误信息");
        logger.fatal("致命信息");

    }
}

3.使用log4j

最常用的还是通过log4j.properties配置.
首先先介绍一下log4j的日志等级

级别描述
OFF最高级,用于关闭日志记录
FATAL导致应用程序提前终止的严重错误。一般这些信息将立即呈现在状态控制台上
ERROR其他运行时错误或意外情况。一般这些信息将立即呈现在状态控制台上
WARN使用已过时的API,API的滥用,潜在错误,其他不良的或意外的运行时的状况(但不一定是错误的)。一般这些信息会立即呈现在状态控制台上
INFO令人感兴趣的运行时事件(启动/关闭)。一般这些信息将立即呈现在状态控制台上,因而要保守使用,并保持到最低限度。
DEBUG流经系统的详细信息。一般这些信息只记录到日志文件中
TRACE最详细的信息。一般这些信息只记录到日志文件中。

下面是一些配置说明:
配置根Logger:

# 语法:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
# 例子:
# 将等级为DEBUG的日志信息输出到Console中,目的地可以有多个,可以自定义名称
log4j.rootLogger = DEBUG,Console

配置文件的输出目的地Appender:

# 语法
log4j.appender.appenderName = fully.qualified.name.of.appender.class  
log4j.appender.appenderName.option1 = value1  
…  
log4j.appender.appenderName.option = valueN
# 例子:
log4j.appender.Console=org.apache.log4j.ConsoleAppender
# 常见appender:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

日志信息的格式

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  
log4j.appender.appenderName.layout.option1 = value1  
…  
log4j.appender.appenderName.layout.option = valueN
例子:
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
# Log4j提供的org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
# 格式参数:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
# 例子:
log4j.appender.Console.layout.ConversionPattern=%5p  - %m%n

参考资料:

  1. log4j——维基百科
  2. 使用java代码配置log4j
  3. 最详细的Log4J使用教程
  4. log4j——Introduction

版权声明:本文为slow_sparrow原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。