JAVA后台框架优化之日志篇

1.日志规范

     各业务系统日志需要统一,以方便查看、收集日志, 日后统一ELK日志管理,以下为项目的日志配置,

     这是兼容当前系统的日志,以后推行微服架构时会有变动,但日志存放方式不会改变,日后会推行spring boot log4j2.yml

      主要分为三块 : 控制台日志 consoleAppend (本地调试可以打开,发布环境不能打开)

                                 业务日志   infoAppend  按日切分  ${catalina.home}/logs/ucenter/info.log  (ucenter 为具体业务模块的名称 如站点 site)

                                 错误日志  errorAppend 按日切分  ${catalina.home}/logs/ucenter/error.log

     各业务模块接入:只要把下面  log4j.xml (链接)文件放到web 模块 根目录下即可。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!--
       * 1. 一个appender子元素定义一个日志输出目的地
       * 2. 一个logger子元素定义一个日志写出器
    -->
    <!-- catalina.out -->
    <appender name="consoleAppend" class="org.apache.log4j.ConsoleAppender" >
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p][%t][%c{1}]-[%M] %m%n" />
        </layout>
    </appender>

    <!-- error log -->
    <appender name="errorAppend" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="${catalina.home}/logs/ucenter/error.log" />
        <param name="Append" value="true" />
        <!--<param name="DatePattern" value="yyyy-MM-dd-HH-mm'.html'"/>-->
        <param name="DatePattern" value="yyyy-MM-dd'.log'"/>
        <param name="MaxBackupIndex" value="10" />
        <param name="MaxFileSize" value="4000000" />
        <param name="encoding" value="utf-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t][%c] %p - %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
    </appender>

    <!-- INFO -->

    <!--org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)-->
    <!--<appender name="infoAppend" class="org.apache.log4j.RollingFileAppender">-->
    <appender name="infoAppend" class="cn.gamemall.ucenter.core.aop.logger.core.DailyRollingFileInfoAppender">
        <param name="File" value="${catalina.home}/logs/ucenter/info.log" />
        <param name="Append" value="true" />
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <!--<param name="MaxBackupIndex" value="10" />-->
        <!--<param name="MaxFileSize"  value="4096" />-->
        <param name="threshold" value="INFO"/>
        <param name="encoding" value="utf-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t][%c] %p - %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="WARN" />
        </filter>
    </appender>

    <appender name="IBatisAppend" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Append" value="true" />
        <param name="File" value="${catalina.home}/logs/ucenter/info.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t][%c] %p - %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="FATAL" />
        </filter>
    </appender>

    <!--
        logger的作用:
        1.[name属性]:指定你定义Logger对象时候的name
        2. additivity : children-logger是否使用 rootLogger的配置,
           additivity在log4j默认为true。这解释了为什么有些时候,一个日志信息在屏幕上会有多次输出。
        3.还可以指定level(输出级别)、appender-ref(指定哪个append)
     -->
    <!-- loggers -->
    <logger name="com.ibatis" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="IBatisAppend" />
    </logger>
    <logger name="java.sql.Connection" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="IBatisAppend" />
    </logger>

    <logger name="java.sql.Statement" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="IBatisAppend" />
    </logger>

    <logger name="java.sql.PreparedStatement" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="IBatisAppend" />
    </logger>

    <logger name="java.sql.ResultSet" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="IBatisAppend" />
    </logger>

    <logger name="cn.xxx.info" additivity="true">
        <!-- 如果1个包想对应多个 Appender 就这样,对于每个Appender自定义的日志级别可以在Appender上加上filter -->
        <level value="INFO"/>
        <appender-ref ref="infoAppend" />
    </logger>
    <logger name="cn.xxx.error" additivity="true">
        <!-- 如果1个包想对应多个 Appender 就这样,对于每个Appender自定义的日志级别可以在Appender上加上filter -->
        <level value="ERROR"/>
        <appender-ref ref="infoAppend" />
    </logger>

    <!--
        root的作用(相当于全局的意思):
        1.[priority ]:指定默认的全局输出级别
        2.[appender-ref ]:指定一些默认的append(没有指出特殊包或者类,即那些没有指定<logger>元素的append)的输出;
    -->
    <root>
        <priority value="INFO" />
        <!--<appender-ref ref="consoleAppend" />-->
        <appender-ref ref="IBatisAppend" />
        <appender-ref ref="errorAppend" />
        <appender-ref ref="infoAppend" />
    </root>

</log4j:configuration>
原文地址:https://www.cnblogs.com/laobaozi/p/6638701.html