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>