log4j study notes

 

    After the project is deployed online, many times when problems occur, the problem is to locate the problem by viewing the log. The more detailed the log is, the more helpful it is to locate the problem. Here we use the log4j plug-in to record the log. log4j is a very mature software. The logging plug-in records logs through configuration files, which can be configured through log4j.xml, log4j.properties, log4j.dtd and other files. It took an afternoon to find information on the Internet and organized a set of log4j.xml configuration information.

    Reference address:

        1、http://blog.csdn.net/lujiancs/article/details/8285297

        2、http://wenku.baidu.com/link?url=RYjRaXDA0kWN7HpogdSdodCblcnGcbmVTxBaEqNiwz7m6T18ucjFsaCnD2l1mH1ezEd_K5ICP2sQtt8P72xyjbjn6pT4nE3qM74o2SK2vEu

        3、http://zhangxiang390.iteye.com/blog/258455

 

1. One of the following items is explained in detail by sorting out the annotated log4j.xml file

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
	<!--
		Set the channel name and output mode, among which there are 5 output mode appenders, which are
		org.apache.log4j.ConsoleAppender (console)
		org.apache.log4j.RollingFileAppender (rolling files, automatically recording the latest log to the specified file)
		org.apache.log4j.FileAppender (file)  
		org.apache.log4j.DailyRollingFileAppender (generates a log file every day)  
		org.apache.log4j.WriterAppender (send log information to specified place in stream format)
	-->
	<!--Output method: output to console-->  
	<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
	    <!--
			The parameters all start with %. Different parameters after that represent different formatting information:  
			%c outputs the full name of the class to which it belongs, which can be modified to %d{Num}, the range of Num class name output
				For example: "org.apache.elathen.ClassName",%C{2} will output elathen.ClassName   
			%d Output log time in the format of %d{yyyy-MM-dd HH:mm:ss,SSS}, which can be specified as %d{HH:mm:ss}  
			%l Output the location where the log event occurs, including the category name, the thread of occurrence, and the number of lines in the code
			%n newline character  
			%m Output code specified information, such as info("message"), output message  
			%p output priority, ie FATAL, ERROR, etc.  
			%r output the number of milliseconds it takes to display the log information from startup  
			%t output the name of the thread that generated the log event
		-->
		<!-- output form -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/>
		</layout>
		
		<!--Filter sets the output level-->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
		    <!-- The priority is divided into OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL from high to low, Log4j recommends only using FATAL, ERROR, WARN, INFO, DEBUG these four levels-->
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="ERROR" />
		</filter>
	</appender>
	
	
	<!-- The following will output log information to different files according to the level-->
	<!-- Input all level logs into the specified file-->
	<appender name="ALL" class="org.apache.log4j.RollingFileAppender">
	    <!-- log encoding format-->
	    <param name="Encoding" value="UTF-8" />  
	    <!-- Set the log output file name and path-->
		<param name="File" value="${catalina.base}/log/support.log"/>	
		<!-- Set whether to add a new log based on the original log when restarting the service -->
		<param name="Append" value="true"/>
		<!-- Set the maximum log file size-->
		<param name="MaxFileSize" value="5240KB"/>
		<param name="MaxBackupIndex" value="100"/>	
		<!-- output form -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/>
		</layout>
		
		<!--Filter sets the output level-->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="FATAL" />
		</filter>
	</appender>
	
	<!-- Set the configuration information with the level of ERROR, and input the error information into the specified file-->
	<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>
	
	
	<!-- Specify logger settings, additivity indicates whether to follow the default inheritance mechanism-->  
	<!-- Specify the log output level under the project path and jar package path-->
	<logger name="org.springframework" additivity="false">  
	    <!-- log output level-->
	    <level value="INFO" />
	    <!-- Define the inherited parent class-->
	    <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>
	
	<!-- Specify the log output level com.gamexun.support under the project path as the project path -->  
	<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>
	
	
	<!-- root logger settings -->  
	<root>
		<appender-ref ref="STDOUT"/>
		<appender-ref ref="ALL"/>
		<appender-ref ref="ERROR"/>
	</root>
</log4j:configuration>

 

2. Introduce log4j into the project

    If you are building a web project, you can directly put log4j.xml into the src and directory;

    If you can't find it in other cases, you can configure it in web.xml, or you can configure it in other ways such as spring.....

 

3. Application in 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;
	}
}

 

 

 

    项目部署到线上之后,出现问题很多时候查看问题是通过查看日志来定位问题越详细的日志对定位问题越有帮助,这里我们用的多的是log4j插件来记录日志,log4j是一款很成熟的日志记录插件,通过配置文件记录日志,可以通过log4j.xml、log4j.properties、log4j.dtd等文件配置,花了一下午的时间上网找资料,整理了一套log4j.xml的配置信息。

    参考地址:

        1、http://blog.csdn.net/lujiancs/article/details/8285297

        2、http://wenku.baidu.com/link?url=RYjRaXDA0kWN7HpogdSdodCblcnGcbmVTxBaEqNiwz7m6T18ucjFsaCnD2l1mH1ezEd_K5ICP2sQtt8P72xyjbjn6pT4nE3qM74o2SK2vEu

        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;
	}
}

 

 

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=327064400&siteId=291194637