按级别分类输出日志 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 name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Threshold" value="ERROR"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%C] %m%n"/> </layout> </appender> <!-- error级别的日志输出到文件 是为了看后台报的异常 -->
<appender name="file" class="org.apache.log4j.RollingFileAppender"> <param name="Threshold" value="ERROR"/> <param name="File" value="${logfilepath}log-error.log"/><!-- 相对路径啊 --> <param name="Append" value="true"/> <param name="MaxFileSize" value="1MB"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%C] %m%n"/> </layout> </appender> <!-- debug到info级别的信息输出到另外一个文件 是为了看后台执行的sql语句 -->
<appender name="file_sql" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${logfilepath}beehive-sql_new.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="1MB"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%C] %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="debug" /> <param name="levelMax" value="info" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <logger name="org.apache.beehive.controls.system.jdbc" additivity="true"> <level value="DEBUG" /> </logger> <root> <level value ="ERROR"/> <appender-ref ref="console"/> <appender-ref ref="file"/> <appender-ref ref="file_sql"/> </root> </log4j:configuration>
节点的顺序不能乱,不然会报错的
写个servlet(是这么拼写吧)自己指定log4j.xml的位置顺便解决一哈日志文件相对路径的问题
package util; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.xml.DOMConfigurator; public class Log4jInit extends HttpServlet { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(Log4jInit.class); public void init() { String path = this.getServletContext().getRealPath("/"); String file = this.getInitParameter("log4j_init_path"); String logFile = this.getInitParameter("log4j_logfile_path"); System.setProperty("logfilepath", path+logFile); if (file != null) { // Properties prop = new Properties(); try { // prop.load(new FileInputStream(path + file)); // 加载log4j.properties // 设置日志文件的输出路径 // prop.setProperty("log4j.appender.file.File", path + logFile + prop.getProperty("log4j.appender.file.File")); // prop.setProperty("log4j.appender.file_sql.File", path + logFile + prop.getProperty("log4j.appender.file_sql.File")); // 加载配置项 // PropertyConfigurator.configure(prop); DOMConfigurator.configure(path + file); super.init(); } catch (Exception e) { logger.info("初始化log4j日志输入路径异常,请检查web.xml参数配置是否正常,异常发生在" + this.getClass().getName() + "类的public void init()方法,异常的原意是:" + e.getMessage(), e.fillInStackTrace()); } } } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
注释部分是配置log4j.properties的,不过log4j.properties貌似不能按级别分类输出日志(就是把不同级别的信息输出到不同的文件里)
另附web.xml的相关配置
。。。。。。。。。 <servlet> <servlet-name>lo4jInit</servlet-name> <servlet-class>util.Log4jInit</servlet-class> <init-param> <param-name>log4j_init_path</param-name> <param-value>WEB-INF\log4j.xml</param-value> </init-param> <init-param> <param-name>log4j_logfile_path</param-name> <param-value>WEB-INF\</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> 。。。。。。。。。