日志的基本要素:以上面为例:[ 时间 ] [ 日志级别 ] [ 调用的类和方法第几行 ] - 日志内容
例:[2019-01-04 17:43:20,936] [INFO] [TestMain.checkFile:40] - 日志内容
写日志步骤:
1:导入日志包:log4j-1.2.14.jar
2:添加日志配置文件:log4j.xml (里面有日志的具体配置,如输出格式,日志文件路径等等)
log4j.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS\}] [%p] [%c.%M:%L] - %m%n" />
</layout>
</appender>
<appender name="INFO_FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/gjj.log" />
<param name="encoding" value="UTF-8" />
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="50" />
<param name="MaxFileSize" value="10MB" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\}] [%p] [%c.%M:%L] - %m%n" />
</layout>
</appender>
<appender name="ERROR_FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/gjj.error.log" />
<param name="encoding" value="UTF-8" />
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="50" />
<param name="MaxFileSize" value="10MB" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\}] [%p] [%c.%M:%L] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="ERROR"/>
<param name="LevelMin" value="ERROR"/>
</filter>
</appender>
<appender name="WARN_FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/gjj.warn.log" />
<param name="encoding" value="UTF-8" />
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="50" />
<param name="MaxFileSize" value="10MB" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\}] [%p] [%c.%M:%L] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="WARN"/>
<param name="LevelMin" value="WARN"/>
</filter>
</appender>
<logger name="warn.log">
<level value="WARN" />
<appender-ref ref="WARN_FILE" />
</logger>
<logger name="error.log" additivity="false">
<level value="ERROR" />
<appender-ref ref="ERROR_FILE" />
</logger>
<logger name="info.log" additivity="false">
<level value="INFO" />
<appender-ref ref="INFO_FILE" />
</logger>
<root>
<priority value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="INFO_FILE" />
</root>
</log4j:configuration>
3:建立日志工具类:LoggerUtil.java
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;
import org.apache.log4j.xml.DOMConfigurator;
public class LoggerUtil {
static {
DOMConfigurator.configure(LoggerUtil.class.getResource(
"/").getFile() + "log4j.xml");
}
public static Logger getLogger(Class<?> clazz) {
return Logger.getLogger(clazz);
}
public static Logger getLogger(String name) {
return Logger.getLogger(name);
}
public static Logger getLogger(String name, LoggerFactory factory) {
return Logger.getLogger(name, factory);
}
public static Logger getRootLogger() {
return Logger.getRootLogger();
}
}
4:在每个要打印日志的类前面放一句(基本每个类都要打日志):
private static Logger log = LoggerUtil.getLogger(TestMain.class);
例:
注:TestMain.class要根据不同的类进行变化
类中要打日志时就可以:
总结:以后,上述日志都会打印到日志文件中,如下:
当项目上线后,我们就可以通过查看日志来监控项目的情况,和项目出问题的位置(因为上线后项目都是class文件,它也不可能给你用eclipse跑在控制台看错误位置)
要养成良好的写日志习惯,日志一定要慢慢变完整,宁可多谢也不要节约,这样以后项目出问题就可以很快找到位置,减少痛苦(过来人警告!!)