【将不同级别日志分别输出到文件】log4j配置

源代码
     public boolean isAsSevereAsThreshold(Priority priority)  
      {  
          return threshold == null || priority.isGreaterOrEqual(threshold);  
      }  



重写
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Priority;

public class LogAppender extends DailyRollingFileAppender {
	@Override
	public boolean isAsSevereAsThreshold(Priority priority) {
		// 只判断是否相等,不判断优先级
		return this.getThreshold().equals(priority);
	}

}



public class Test {
	static Logger log = Logger.getLogger(Test.class);

	public static void main(String[] args) throws Exception {
		try {
			throw new Exception("抛出异常测试");
		} catch (Exception e) {
			log.info(e.getMessage(), e);
		}
	}
}

log4j.rootLogger=debug,console,A1,A2,A3
#输出到控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n

#输出log.info日志 按照日期分割文件
log4j.logger.info=A1
log4j.appender.A1=com.log.LogAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
log4j.appender.A1.datePattern='.'yyyy-MM-dd
log4j.appender.A1.Threshold = info
log4j.appender.A1.append=true
log4j.appender.A1.File=f:/tomcat.log

#输出log.debug日志 按照日期分割文件
log4j.logger.debug=A2
log4j.appender.A2=com.log.LogAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] %l %m%n
log4j.appender.A2.datePattern='.'yyyy-MM-dd
log4j.appender.A2.Threshold = debug
log4j.appender.A2.append=true
log4j.appender.A2.File=f:/tomcatDebug.log

#输出log.error日志 按照文件大小分割日志,最多10个日志
#ConversionPattern会打印出catch语句块儿中,抛出异常的行号
log4j.logger.error=A3
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c (%F\:%L) \: %m%n
log4j.appender.A3.Threshold = ERROR
log4j.appender.A3.append=true
log4j.appender.A3.File=f:/tomcatError.log
log4j.appender.A3.MaxFileSize=100KB
log4j.appender.A3.MaxBackupIndex=10





log4j是apache基金会的一个项目,日志记录器(Logger)是日志处理的核心组件,log4j具有7种级别(Level).
DEBUG Level: 指出细粒度信息事件对调试应用程序是非常有帮助的,就是输出debug的信息.
INFO level:  表明消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息.
WARN level:  表明会出现潜在错误的情形,就是显示警告信息.
ERROR level: 指出虽然发生错误事件,但仍然不影响系统的继续运行.就是显示错误信息.
FATAL level: 指出每个严重的错误事件将会导致应用程序的退出.
ALL level:   是最低等级的,用于打开所有日志记录.
OFF level:   是最高等级的,用于关闭所有日志记录.

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。

------------------------------------------

参数都以%开始后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
%c:输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的围  如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName
%m:输出代码指定信息,如info(“message”),输出message
%r:输出从启动到显示该log信息所耗费的毫秒数
%t:输出产生该日志事件的线程名
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。


如何修改tomcat控制台日志文件输出路径和文件名?
修改tomcat/bin/catalina.sh文件
if [ -z "$CATALINA_OUT" ] ; then
  #CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
  CATALINA_OUT=/data/logs/tomcat/catalinaYourName.out
fi

猜你喜欢

转载自a25765339.iteye.com/blog/2152175