• slf4j+log4j2的配置


    昨天自己测试了一下slf4j+log4j2的配置,可以正常使用,虽然配置十分简单,但好记性不如烂笔头,想想还是记录下来吧。

    运行的环境:jdk1.7tomcat7Mavenweb项目

    1.在新建的maven项目的pom文件中添加jar包依赖(依赖代码在步骤末尾):

    需要添加依赖的jar包有:

    slf4japi接口包:slf4j-api

    log4j2的核心包:log4j-core

    log4j2api接口包:log4j-api

    slf4j对应log4j2日志框架的驱动包:log4j-slf4j-impl

    log4j2的异步日志功能包:com.lmax.disruptor

    解决web项目log4j可能出现警告的jar包:log4j-web

    2.配置log4j2.xml日志配置文件(日志配置文件内容放在步骤末尾

    ·日志配置文件默认读取路径为src/main/resource

    ·若文件放置在默认读取路径下则无需配置读取路径

    ·若文件放置到其他路径下则需要在web.xml中设置日志配置文件的读取路径,代码如下:

    <context-param>
       <param-name>log4jConfiguration</param-name>
       <param-value>classpath:log4j2.xml</param-value>
    </context-param>

    3.在代码中使用日志功能:

     1 import org.slf4j.Logger;
     2 import org.slf4j.LoggerFactory;
     3 
     4 public class logTest {
     5 
     6     // 通过slf4j接口创建Logger对象
     7     private static final Logger logger = LoggerFactory.getLogger(logTest.class);
     8 
     9     public static void main(String[] args) {
    10         logger.info("this is info");
    11         logger.error("this is error");
    12     }
    13 }

    运行效果:

     

    关于日志配置文件的详细说明请参考log4j2配置文件log4j2.xml详解,以下是pom.xml需要加入的jar包依赖以及日志配置文件log4j2.xml内容示例:

    pom.xml需要加入的jar包依赖:

    <properties>
    
    <!-- jar包版本设置 -->
    
    <slf4j.version>1.7.21</slf4j.version>
    
    <log4j.version>2.11.0</log4j.version>
    
    </properties>
    
    <dependencies>
    
    <!-- 导入slf4j的接口包以及对应日志框架的驱动包 -->
    
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    
    <dependency>
    
    <groupId>org.slf4j</groupId>
    
    <artifactId>slf4j-api</artifactId>
    
    <version>${slf4j.version}</version>
    
    </dependency>
    
    <!--用于slf4j与log4j2保持桥接 -->
    
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
    
    <dependency>
    
        <groupId>org.apache.logging.log4j</groupId>
    
        <artifactId>log4j-slf4j-impl</artifactId>
    
        <scope>runtime</scope>
    
        <version>${log4j.version}</version>
    
    </dependency>
    
     
    
    <!-- 导入日志框架核心包与接口包 -->
    
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    
    <dependency>
    
    <groupId>org.apache.logging.log4j</groupId>
    
    <artifactId>log4j-core</artifactId>
    
    <scope>runtime</scope>
    
    <version>${log4j.version}</version>
    
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    
    <dependency>
    
        <groupId>org.apache.logging.log4j</groupId>
    
        <artifactId>log4j-api</artifactId>
    
        <version>${log4j.version}</version>
    
    </dependency>
    
     
    
    <!--用于解决web环境下关闭服务器时可能出现的log4j线程无法及时关闭的warn,web工程需要包含log4j-web,非web工程不需要 -->
    
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
    
    <dependency>
    
    <groupId>org.apache.logging.log4j</groupId>
    
    <artifactId>log4j-web</artifactId>
    
    <scope>runtime</scope>
    
    <version>${log4j.version}</version>
    
    </dependency>
    
     
    
    <!--使用log4j2的AsyncLogger时需要包含disruptor -->
    
    <!-- https://mvnrepository.com/artifact/com.lmax/disruptor -->
    
    <dependency>
    
        <groupId>com.lmax</groupId>
    
        <artifactId>disruptor</artifactId>
    
        <scope>runtime</scope>
    
        <version>3.4.2</version>
    
    </dependency>
    
    </dependencies>

    日志配置文件内容示例:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <!-- 
     4  日志说明:
     5 
     6 (1)请根据实际情况配置各项参数
     7 
     8 (2)需要注意日志文件备份数和日志文件大小,注意预留目录空间
     9 
    10 (3)实际部署的时候backupFilePatch变量需要修改成linux目录
    11 
    12  -->
    13 
    14 <configuration status="error">
    15 
    16     <Properties>
    17 
    18         <Property name="fileName">front.log</Property>
    19 
    20         <Property name="backupFilePatch">d:/usr/front/log/</Property>
    21 
    22       </Properties>
    23 
    24     <!--先定义所有的appender-->
    25 
    26     <appenders>
    27 
    28         <!--这个输出控制台的配置-->
    29 
    30         <Console name="Console" target="SYSTEM_OUT">
    31 
    32              <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
    33 
    34             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
    35 
    36             <!--这个都知道是输出日志的格式-->
    37 
    38             <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
    39 
    40         </Console>
    41 
    42         
    43 
    44         <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
    45 
    46         <RollingFile name="RollingFile" fileName="${backupFilePatch}/${fileName}"
    47 
    48             filePattern="${backupFilePatch}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz">
    49 
    50             <PatternLayout
    51 
    52                 pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n" />
    53 
    54             
    55 
    56             <!-- 日志文件大小 -->
    57 
    58             <SizeBasedTriggeringPolicy size="20MB" />
    59 
    60             <!-- 最多保留文件数 -->
    61 
    62             <DefaultRolloverStrategy max="20"/>
    63 
    64         </RollingFile>
    65 
    66     </appenders>
    67 
    68     
    69 
    70     <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    71 
    72     <loggers>
    73 
    74         <!--建立一个logger,此logger监听name对应的包名下的日志输出,level表示日志级别-->
    75 
    76         <Logger name="com.testlog" level="trace"
    77 
    78             additivity="true">
    79 
    80             <AppenderRef ref="RollingFile" />
    81 
    82         </Logger>
    83 
    84         <!--建立一个默认的root的logger-->
    85 
    86         <Root level="error">
    87 
    88          <!-- 在root中关联appender才会在对应的位置输出日志,定义一个输出到文件的appender也必须关联到此处才会保存日志到文件 -->
    89 
    90             <AppenderRef ref="Console" />
    91 
    92         </Root>
    93 
    94     </loggers>
    95 
    96 </configuration>
  • 相关阅读:
    论自己电脑如何搭建服务器
    nodejs + express + art-template + mongodb简单项目
    npm和yarn使用
    Linux内核编译
    Linux 网络编程
    Linux进程管理
    LeetCode1576. 替换所有的问号
    LeetCode392. 判断子序列
    LeetCode674. 最长连续递增序列
    剑指 Offer 48. 最长不含重复字符的子字符串
  • 原文地址:https://www.cnblogs.com/new-life/p/9246246.html
Copyright © 2020-2023  润新知