log4j2的配置和使用以及与log4j的区别

log4j2的配置和使用以及与log4j的区别

xiaosawuhen 0人评论 940人阅读 2018-03-05 10:25:00

http://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0

log4j2的配置主要包含两方面功能

    1.log配置文件的配置问题

        如果进行了local的配置(普通配置,JNDI)配置,直接寻找指定的文件

            普通配置:    

1

2

3

4

<context-param>  

    <param-name>log4jConfiguration</param-name>  

    <param-value>/META-INF/log4j2.xml</param-value>  

</context-param>

            JNDI配置:

                isLog4jContextSelectorNamed:布尔类型配置,由它选择是否使用JndiContextSelector。如果它设为true的话,那么log4jContextName一定要配置或者在web.xml中指定display-name。并且log4jConfiguration也要配置一个URL,这个URL是log4j2的配置文件地址,但这个不是必须要配置的。

                log4jContextName:配置display-name。

                log4jConfiguration:log4j配置文件的路径

1

2

3

4

5

6

7

8

9

10

11

12

        <context-param>        

            <param-name>isLog4jContextSelectorNamed</param-name>

            <param-value>true</param-value>

        </context-param>

        <context-param>

            <param-name>log4jContextName</param-name>

            <param-value>myApplication</param-value>

        </context-param>

        <context-param>

            <param-name>log4jConfiguration</param-name>

            <param-value>file:///etc/myApp/myLogging.xml</param-value>

        </context-param>

    2.是否自启动(分为servlet2.5,servlet3.0以上)

        servlet2.5:需要自己配置filter,listener

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

        <listener>        

            <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener

            </listener-class>

        </listener>

        <filter>

        <filter-name>log4jServletFilter</filter-name>

            <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>

            </filter>

        <filter-mapping>

            <filter-name>log4jServletFilter</filter-name>

            <url-pattern>/*</url-pattern>

            <dispatcher>REQUEST</dispatcher>

            <dispatcher>FORWARD</dispatcher>

            <dispatcher>INCLUDE</dispatcher>

            <dispatcher>ERROR</dispatcher>

            <dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization only; not supported in --!>

        </filter-mapping>

        servlet3.0:

            log4j2能够在Servlet3.0下正常使用且不用配置。因为在Servlet3.0的API中加入了ServletContainerInitializer,它自动启动了Filter和ServletContextListener(这两个类在Servlet2.5中需要配置)。

            对于某些用户来说,自动启动Log4j是有问题的或者不受欢迎的。你可以使用isLog4jAutoInitializationDisabled参数来关闭自动启动。在web.xml中进行如下设置,即可自动取消启动。

1

2

3

4

        <context-param>

           <param-name>isLog4jAutoInitializationDisabled</param-name>

           <param-value>true</param-value>

        </context-param>

            一旦你禁止自动初始化,你必须像Servlet2.5 web程序中那样进行初始化操作。而且必须要在其它的框架启动之前启动。

由于log4j2不支持2.4及以下版本的web程序,下面介绍下log4j与log4j2的一些区别

    1.pom引入的区别

        log4j:

1

2

3

4

5

    <dependency>

        <groupId>log4j</groupId>

        <artifactId>log4j</artifactId>

        <version>1.2.17</version>

    </dependency>

        log4j2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<!-- log4j2 -->

        <dependency>

            <groupId>org.apache.logging.log4j</groupId>

            <artifactId>log4j-core</artifactId>

            <version>2.1</version>

        </dependency>

        <dependency>

            <groupId>org.apache.logging.log4j</groupId>

            <artifactId>log4j-api</artifactId>

            <version>2.1</version>

        </dependency>

        <dependency>

            <groupId>org.apache.logging.log4j</groupId>

            <artifactId>log4j-web</artifactId>

            <version>2.1</version>

        </dependency>

    2.log4j想要生效,需要在xml中进行配置,而log4j2则有自启动功能

1

2

3

4

5

6

7

8

9

10

11

      <listener>

        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

      </listener

      <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>classpath:config/log4j.properties</param-value>

      </context-param>

      <context-param>

        <param-name>log4jRefreshInterval</param-name>

        <param-value>60000</param-value>

      </context-param>

    3.Log调用

        log4j:

1

2

    import org.apache.log4j.Logger;

    private final Logger LOGGER = Logger.getLogger(Test.class.getName());

        log4j2:

1

2

3

4

    import org.apache.logging.log4j.Level;

    import org.apache.logging.log4j.LogManager;

    import org.apache.logging.log4j.Logger;

    private static Logger logger = LogManager.getLogger(Test.class.getName());

log4j2配置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<?xml version="1.0" encoding="UTF-8"?>    

<configuration status="error">  

    <!-- 先定义所有的appender -->  

    <appenders>  

        <!-- 这个输出控制台的配置 -->  

        <Console name="Console" target="SYSTEM_OUT">  

            <!--  控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->  

            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>  

            <!-- 这个都知道是输出日志的格式 -->  

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  

        </Console>  

        <!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->  

        <!-- append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->  

        <File name="log" fileName="log/test.log" append="false">  

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  

        </File>  

        <!-- 添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝  -->  

        <File name="ERROR" fileName="logs/error.log">  

            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>  

            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  

        </File>  

        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->  

        <RollingFile name="RollingFile" fileName="logs/web.log"  

                     filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">  

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  

            <SizeBasedTriggeringPolicy size="2MB"/>  

        </RollingFile>  

    </appenders>  

    <!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->  

    <loggers>  

        <!--  建立一个默认的root的logger -->  

        <root level="trace">  

            <appender-ref ref="RollingFile"/>  

            <appender-ref ref="Console"/>  

            <appender-ref ref="ERROR" />  

            <appender-ref ref="log"/>  

        </root>  

    </loggers>  

</configuration>

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/81487978