maven工程 slf4j和log4j配合使用

Posted wishriver

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven工程 slf4j和log4j配合使用相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/qq_27093465/article/details/62928590

 

使用slf4j的优点:

提供带参数的日志输出方法(SLF4J 1.7及以后版本)。 

日志级别

  1. OFF 为最高等级 关闭了日志信息
  2. FATAL 为可能导致应用中止的严重事件错误
  3. ERROR 为严重错误 主要是程序的错误
  4. WARN 为一般警告,比如session丢失
  5. INFO 为一般要显示的信息,比如登录登出
  6. DEBUG 为程序的调试信息
  7. TRACE 为比DEBUG更细粒度的事件信息
  8. ALL 为最低等级,将打开所有级别的日志

配置日志信息输出目的地

  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(将日志信息以流格式发送到任意指定的地方) 

配置日志信息的格式

  1. org.apache.log4j.htmlLayout(以HTML表格形式布局),
  2. org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

日志信息格式中几个符号所代表的含义: 

-X号: X信息输出时左对齐;
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

  • 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
  • 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
  • 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
  • 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

使用办法

pom中只需引入slf4j,然后maven会引入它所依赖的其它JAR包。

1.在pom文件中添加代码

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>

 建立log4j的配置文件,假设只输出到控制台

<?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 xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!-- 输出日志到控制台 ConsoleAppender -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" 
       value="%p:%d{dd HH:mm:ss,SSS\\}ms- [%c{1}]%L行-%m%n" /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="INFO"/>
            <param name="LevelMax" value="INFO"/>
        </filter>
        <!-- 
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
        <param name="LevelToMatch" value="INFO" /> 
        </filter> 
        -->
        <filter class="org.apache.log4j.varia.StringMatchFilter"> 
            <param name="StringToMatch" value="Configkeeper" /> 
            <param name="AcceptOnMatch" value="false" /> 
        </filter> 
    </appender>
    <root>
        <level value="INFO"/> 
        <appender-ref ref="console" />
    </root> 
</log4j:configuration>

 

 

3.在web.xml中配置log4j

 

  
     <!-- 配置log4j配置文件路径 -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>WEB-INF/config/log4jConfig.xml</param-value>
    </context-param>
    <!-- 配置Log4j监听器 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

 

 如果在某个Controller或者Model或者Service或者Dao中输出日志的时候需要引入

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory;

 

然后实例化,比如在controller中

 

 需要打印日志的地方

logger.info("当前状态{}", "收到列表请求,并进入");

  运行效果 

当不需要使用log4j 用回java的loggin的时候,

在pom.xml中进行如下修改,重新部署即可

输出风格又回来了

 

以上是关于maven工程 slf4j和log4j配合使用的主要内容,如果未能解决你的问题,请参考以下文章

maven构建SSM工程[应用]2

关于slf4j log4j log4j2的jar包配合使用的那些事

slf4j+log4j配置(Maven)

slf4j+log4j2的配置

使用log4j如何打印输出到日志文件

log4j和slf4j的使用