根据日志定位问题的时候,如果所有的日志都打到一个日志文件里,查问题就很不直观了。
指定某个路径的包或类打到单独的日志文件
配置如下:
<appender name="poll" class="org.apache.log4j.DailyRollingFileAppender"> <param name="encoding" value="UTF-8" /> <param name="File" value="/export/Logs/im.**.com/poll.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %t %5p [%c:%L] - %m%n" /> </layout> </appender> <category name="com.**.im.tracker.web.servlet.DomainListServlet" additivity="false"> <level value="ERROR" /> <appender-ref ref="poll" /> <appender-ref ref="CONSOLE" /> </category>
appender定义了一个日志文件输出源。category的name字段指定了要单独大日志的包或类的路径,子字段的appender-ref则定义了这个包用哪几个日志文件输出源。
指定某个特殊功能的日志打到独立的日志文件
有时候,一个类很大,日志也很多,但是这个类里的某行或某几行日志特别重要,需要单独打到一个日志文件里观察。这个时候需要用另外一种配置。
首先需要在java代码里单独配置一个logger
private static final Logger LINKLOGGER = LoggerFactory.getLogger("LinkLogger");
然后打日志的之后用这个logger打日志。
对应的log4j配置文件配置如下:
<appender name="link" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="/export/Logs/im.**.com/link.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %t %5p [%c:%L] - %m%n" /> </layout> </appender> <logger name="LinkLogger" additivity="false"> <level value="info" /> <appender-ref ref="link" /> </logger>
这样配置好后,用LINKLOGGER打的日志就会打到link.log里了。