项目部署到线上之后,出现问题很多时候查看问题是通过查看日志来定位问题越详细的日志对定位问题越有帮助,这里我们用的多的是log4j插件来记录日志,log4j是一款很成熟的日志记录插件,通过配置文件记录日志,可以通过log4j.xml、log4j.properties、log4j.dtd等文件配置,花了一下午的时间上网找资料,整理了一套log4j.xml的配置信息。
参考地址:
1、http://blog.csdn.net/lujiancs/article/details/8285297
3、http://zhangxiang390.iteye.com/blog/258455
1、下面列一项通过整理加注释的log4j.xml文件来详细说明
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- 设置通道名称和输出方式,其中输出方式appender有5种,分别为 org.apache.log4j.ConsoleAppender (控制台) org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志到指定文件) org.apache.log4j.FileAppender (文件) org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件) org.apache.log4j.WriterAppender (将日志信息以流格式发送到指定地方) --> <!--输出方式:输出到控制台--> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <!-- 参数都以%开始后面不同的参数代表不同的格式化信息: %c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的范围 如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName %d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss} %l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数 %n 换行符 %m 输出代码指定信息,如info(“message”),输出message %p 输出优先级,即 FATAL ,ERROR 等 %r 输出从启动到显示该log信息所耗费的毫秒数 %t 输出产生该日志事件的线程名 --> <!-- 输出形式 --> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/> </layout> <!--过滤器设置输出的级别--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 优先级由高到低分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这四个级别 --> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 以下根据级别将日志信息输出到不同的文件中 --> <!-- 将ALL级别日志都输入到指定文件中 --> <appender name="ALL" class="org.apache.log4j.RollingFileAppender"> <!-- 日志编码格式 --> <param name="Encoding" value="UTF-8" /> <!-- 设置日志输出文件名和路径 --> <param name="File" value="${catalina.base}/log/support.log"/> <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> <param name="Append" value="true"/> <!-- 设置日志文件最大值 --> <param name="MaxFileSize" value="5240KB"/> <param name="MaxBackupIndex" value="100"/> <!-- 输出形式 --> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/> </layout> <!--过滤器设置输出的级别--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="FATAL" /> </filter> </appender> <!-- 设定级别为ERROR的配置信息,并将error的信息输入到指定文件 --> <appender name="ERROR" class="org.apache.log4j.RollingFileAppender"> <param name="Encoding" value="UTF-8" /> <param name="File" value="${catalina.base}/log/support-error.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="10240KB"/> <param name="MaxBackupIndex" value="100"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制--> <!-- 指定项目路径、jar包路径下的日志输出级别 --> <logger name="org.springframework" additivity="false"> <!-- 日志输出级别 --> <level value="INFO" /> <!-- 定义继承的父类 --> <appender-ref ref="ALL" /> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR"/> </logger> <logger name="org.apache.commons.httpclient" additivity="false"> <level value="INFO" /> <appender-ref ref="ALL" /> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR"/> </logger> <logger name="httpclient.wire" additivity="false"> <level value="INFO" /> <appender-ref ref="ALL" /> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR"/> </logger> <!-- 指定项目路径下的日志输出级别 com.gamexun.support为项目路径--> <logger name="com.gamexun.support" additivity="false"> <level value="DEBUG" /> <appender-ref ref="ALL" /> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR"/> </logger> <logger name="org.quartz.core" additivity="false"> <level value="INFO" /> <appender-ref ref="ALL" /> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR"/> </logger> <logger name="org.mybatis" additivity="false"> <level value="INFO" /> <appender-ref ref="ALL" /> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR"/> </logger> <!-- 根logger的设置--> <root> <appender-ref ref="STDOUT"/> <appender-ref ref="ALL"/> <appender-ref ref="ERROR"/> </root> </log4j:configuration>
2、在项目中引入log4j
如果建立的是web项目,直接将log4j.xml放入src跟目录下即可;
如果有其他情况找不到的话,可以再web.xml配置,也可以通过其他方式配置如spring.....
3、java中应用
public class MenuController extends BaseController{
//申明
private static Log log = LogFactory.getLog(MenuController.class);
public AjaxResponse<String> remove(@RequestParam int id, HttpServletRequest request) {
try {
....
} catch (Exception e) {
log.error("该菜单已分配权限,请先删除权限!", e);
}
....
}
public AjaxResponse<String> getGameKey() {
AjaxResponse<String> res = new AjaxResponse<String>();
try {
......
} catch (Exception e) {
log.info("get AdminInfo faile", e);
.....
}
return res;
}
}