关键词:java、maven、log4j.xml
一:添加依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.3</version>
</dependency>
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.3</version> </dependency>
二:log4j.xml配置
<?xml version="1.0" encoding="UTF-8"?> <!-- status用来指定log4j本身的打印日志的级别 monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s --> <Configuration status="debug" monitorInterval="5"> <Properties> <!-- 文件夹创建到eclipse根目录或tomcat的bin(部署到Tomcat) --> <Property name="logPath" >logs/eCommunity</Property> <!-- 绝对路径正常 --> <!-- <Property name="logPath" >D:/logs/eCommunity.log</Property> --> <Property name="warnLog">warnLog</Property> <Property name="patternLayout">%d %-5p [%t] %m (%c:%F:%L) %n</Property> </Properties> <Appenders> <Console name="console"> <PatternLayout pattern="${patternLayout}" /> </Console> <RollingRandomAccessFile name="allFile" fileName="${logPath}/all.log" filePattern="${logPath}/all.log.%d{yyyy-MM-dd}" immediateFlush="true"> <Policies> <TimeBasedTriggeringPolicy /> </Policies> <!-- 过滤 --> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${patternLayout}" /> </RollingRandomAccessFile> <File name="log" fileName="D:/logs/ServerLogMain.log" append="true"> <PatternLayout pattern=""${patternLayout}""/> </File> <!-- 日志通过文件大小和时间备份 --> <RollingRandomAccessFile name="${warnLog}" fileName="${logPath}/${warnLog}.log" filePattern="${logPath}/${warnLog}.log.%d{yyyy-MM-dd-HH}_%i.log" immediateFlush="true"> <Policies> <!-- interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时 --> <!-- modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算 --> <TimeBasedTriggeringPolicy interval="24" modulate="true"/> <SizeBasedTriggeringPolicy size="50MB" /> </Policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --> <DefaultRolloverStrategy max="20"/> <PatternLayout pattern="${patternLayout}" /> </RollingRandomAccessFile> </Appenders> <Loggers> <Logger name="ServerLog" level="debug"> <appender-ref ref="log"/> </Logger> <Logger name="com.yihao01" level="info"/> <Logger name="com.yihao01.park.local.dao" level="info"/> <Logger name="com.yihao01.framework.http.ApiHttpClient" level="trace"/> <Logger name="java.sql.Connection" level="info"/> <Logger name="java.sql.PreparedStatement" level="info"/> <Logger name="java.sql.ResultSet" level="info"/> <Logger name="org.springframework" level="info"/> <Logger name="org.springframework.jdbc" level="info"/> <Logger name="org.springframework.jdbc.core.StatementCreatorUtils" level="info"/> <Logger name="com.oeasy.eCommunity.sqlMappers" level="info"/> <!-- name:用来指定该Logger所适用的类或者类所在的包全路径。 appender-ref:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了, 那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义
的Appender中进行输出 --> <Logger name="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver" additivity="true" level="warn" > <appender-ref ref="${warnLog}"></appender-ref> </Logger> <!-- includeLocation 加上位置信息比如哪个类,第几行 --> <AsyncRoot level="debug" includeLocation="true"> <AppenderRef ref="allFile" /> <AppenderRef ref="console" /> </AsyncRoot> </Loggers> </Configuration>三:使用实例
import org.apache.log4j.Logger; public class LogDemo { private static Logger logger = logger.getLogger(LogDemo.class); public static void main(String[] args) { logger.info("++++ info +++++"); logger.error("++++ error ++++"); } }
四:需求
重新配置一下ecommunity-cloud 的log4j2日志,实现以下功能。 1. 让异常日志可以打多一份 2. 日志文件除了按日期备份外,达到50MB以上也要备份并重新记录。 3. 配置可以在debug的情况下排查日志,线上环境正常运行的时候只记录关键日志。
配置说明:http://5148737.blog.51cto.com/5138737/1398581
PatternLayout说明:http://blog.csdn.net/guoquanyou/article/details/5689652
注意事项:当用到log4j记录日志时,会先找log4j.xml,找不到再去找log4j.properties