美文网首页
使用slf4j + log4j2作为项目日志系统

使用slf4j + log4j2作为项目日志系统

作者: PigPIgAutumn | 来源:发表于2018-02-23 09:24 被阅读0次

    slf4j就相当于在原来日志组件的基础上,在上层再进行封装,这样就可以统一使用slf4j提供的接口输出日志信息,需要更换日志组件时,只需更换底层的jar包就行了,项目代码不需要更改;
    因为不同项目的开发者使用的日志包可能不一样,为了工作上的统一,使用slf4j统一把输出日志的操作封装起来,这样更换日志包就只需要更换底层的java包就行了,代码一点都不需要变,非常方便.

    我的项目是使用maven构建的,所以引入slf4j就非常方便了:

    1.首先引入slf4j的核心包

    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <!-- 首先引入slf4j的核心包 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    
    2.然后引入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>
        <version>2.10.0</version>
    </dependency>
    
    3.其次就需要引入log4j2包
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.10.0</version>
    </dependency>
    4.最后只需要在项目的resources目录下新建一个log4j2.xml作为log4j2的配置文件即可在项目中使用slf4j输出日志
    

    log4j2.xml文件模板:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration status="OFF">
        <appenders>
            <!--输出到控制台-->
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%logger{36}:%L] %-5level - %msg%n"/>
                <!--<ThreSholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>-->
            </Console>
    
            <!--输出到日志文件中-->
            <RollingFile name="InfoLog" fileName="/home/pigpigautumn/CODE/infoLog.log"
                         filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout  pattern="%d{YYYY-MM-dd HH:mm:ss} [%logger{36}:%L] %-5level - %msg%n"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size="50MB"/>
                </Policies>
            </RollingFile>
    
            <!--输出到错误日志文件中-->
            <!--<RollingFile name="ErrorLog" fileName="/home/pigpigautumn/CODE/errorLog.log"-->
                         <!--filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">-->
                <!--<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>-->
                <!--<PatternLayout  pattern="%d{YYYY-MM-dd HH:mm:ss} [%logger{36}:%L] %-5level - %msg%n"/>-->
                <!--<Policies>-->
                    <!--<SizeBasedTriggeringPolicy size="50MB"/>-->
                <!--</Policies>-->
            <!--</RollingFile>-->
        </appenders>
    
        <loggers>
            <!--使appender生效-->
            <root level="info">
                <appender-ref ref="Console"/>
                <!--<appender-ref ref="InfoLog"/>-->
                <!--<appender-ref ref="ErrorLog"/>-->
            </root>
        </loggers>
    </configuration>
    

    代码中有几点要注意:
    1.fileName: 输出的日志文件的文件名

    2.fileParten: 新建的日志文件的命名格式

    3.ThresholdFilter: 只有输出级别大于给定的级别的日志信息才会输出到文件中

    4.PartenLayout: 日志信息的格式

    5.声明了appender后,还必须将该appender添加高loggers的root节点中才会生效

    以上工作都完成后,在代码只要调用LoggerFactory.getLogger(String)就能创建logger实例,就能在代码使用logger.info/logger.warn/logger.error等方法输出日志信息了.

    相关文章

      网友评论

          本文标题:使用slf4j + log4j2作为项目日志系统

          本文链接:https://www.haomeiwen.com/subject/mnvtxftx.html