1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Set root logger level to WARN and append to stdout
log4j.rootLogger=INFO,stdout,R,R1
#日志文件输出目标,控制台/文件
#日志输出方式:控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=com.youcompan.project.log4j.Log4jExPatternLayout
log4j.appender.stdout.layout.ConversionPattern=[xxxx] %d %5p %T (%c.%M:%L) - %m%n
#应用服务器日志目录
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/ydbudget.log
log4j.appender.R.DatePattern = '.'yyyy-MM-dd'.log'
#log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.layout=com.youcompan.project.log4j.Log4jExPatternLayout
log4j.appender.R.layout.ConversionPattern=[xxxx]%d%5p %T (%C.%M:%L) - %m%n
log4j.appender.R.Append=true
#应用根目录
log4j.appender.R1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R1.File=${webApp.root}logs/ydbudget.log
log4j.appender.R1.DatePattern = '.'yyyy-MM-dd'.log'
#log4j.appender.R1.MaxFileSize=500KB
log4j.appender.R1.layout=com.youcompan.project.log4j.Log4jExPatternLayout
log4j.appender.R1.layout.ConversionPattern=[xxxx]%d%5p %T (%C.%M:%L) - %m%n
log4j.appender.R1.Append=true

输出三个地方 配置基本一致, 当然相对路径不同,按日滚动吧

其中应用服务器 中${catalina.home}是tomcat系的自带系统变量 ,无需其他配置

而应用根目录中的${webApp.root} 是在web.xml中通过spring定义的

1
2
3
4
5
6
7
8
9
10
11
<context-param>
  <param-name>webAppRootKey</param-name>
  <param-value>webApp.root</param-value>
</context-param>
<context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>  
   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
</listener>

现在来看布局类的定义和pattern的配置,

Log4jExPatternLayout 这个类是继承自 org.apache.log4j.PatternLayout ,其主要功能就是为了让 pattern 中的 %T 显示 线程号,上代码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Log4jExPatternLayout extends PatternLayout {
    public Log4jExPatternLayout(String pattern){
        super(pattern);
    }
      
    public Log4jExPatternLayout(){
        super();
    }
     /**
      * 重写createPatternParser方法,返回PatternParser的子类
      */
     @Override
     protected PatternParser createPatternParser(String pattern) {
      return new Log4jExPatternParser(pattern);
     }
  
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Log4jExPatternParser extends PatternParser {
  
    public Log4jExPatternParser(String pattern) {
        super(pattern);
    }
     /**
      * 重写finalizeConverter,对特定的占位符进行处理,T表示线程ID占位符
      */
     @Override
     protected void finalizeConverter(char c) {
      if (c == 'T') {
       this.addConverter(new ExPatternConverter(this.formattingInfo));
      } else {
       super.finalizeConverter(c);
      }
     }
  
     private static class ExPatternConverter extends PatternConverter {
  
      public ExPatternConverter(FormattingInfo fi) {
       super(fi);
      }
  
      /**
       * 当需要显示线程ID的时候,返回当前调用线程的ID
       */
      @Override
      protected String convert(LoggingEvent event) {
       return String.valueOf(Thread.currentThread().getId());
      }
  
     }
  
  
}

参考文档忘记了,这篇文章是后来整理的,感谢他们吧

日志配置log4j 打印线程号的更多相关文章

  1. springboot添加log4j日志配置log4j.xml生成日志文件

    第一步:添加pom文件依赖 <!-- log4j --> <dependency> <groupId>org.springframework.boot</gr ...

  2. 日志配置logback

    在选择项目日志框架时,发现log4j的作者开发了新的日志框架,据说性能提高不少,那就选它了,不过,除了配置上有点不习惯外,最重要的一点 ,打印线程号这个功能依然没有(打印线程名这个东西是在是个鸡肋). ...

  3. Log4J日志配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  4. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  5. (转)Log4J日志配置详解

    http://www.cnblogs.com/ITtangtang/p/3926665.html 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源 ...

  6. java Log4j日志配置详解大全

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  7. Spark log4j日志配置详解(转载)

    一.spark job日志介绍    spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...

  8. Log4J日志配置详解[转]

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  9. Log4J日志配置与Juit测试

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器).Appenders(输出源)和Layouts(布局). 这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

随机推荐

  1. 菜鸟的MySQL学习笔记(四)

    MySQL中的运算符和函数: 1.字符函数: 2.数值运算符与函数: 3.比较运算符与函数: 4.日期时间函数: 5.信息函数: 6.聚合函数: 7.加密函数等:   6-1.字符函数: CONCAT ...

  2. Android学习7--日志信息的使用

    在代码的调试中,日志信息是必不可少的,关于日志信息的使用,接下来,小编简要的说明一下: 日志分为几种:Verbose:从字面上解释,verbose为冗长的,啰嗦的,所以verbose日志信息输出的内容 ...

  3. 限制apache错误日志大小

    ①配置错误日志 在http.conf配置: ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/%Y_%m_%d_error_log  ...

  4. Sass 编译的几种方法

    常常有人会问,使用 Sass 进行开发,那么是不是直接通过“<link>”引用“.scss”或“.sass”文件呢? 那么这里告诉大家,在项目中还是引用“.css”文件,Sass 只不过是 ...

  5. USB Key插入和移除监控

    近期在做USB Key插入和移除监控,已经做到了插入和移除USB Key时,程序能够及时感应到. 如下为源代码: private void Form1_Load(object sender, Even ...

  6. STM32下载方法

    一.JLINK下载方法 1.硬件设置 Boot0,Boot1 = 0,*(测试通过) Boot0,Boot1 = 1,0或者0,1(未测试) 2.软件设置 MDK设置 ① 选择Project -> ...

  7. 第 8 章 适配器模式【Adapter Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> 好,请安静,后排聊天的同学别吵醒前排睡觉的同学了,大家要相互理解嘛.今天讲适配器模式,这个模式也很简单,你笔记本上的那个 ...

  8. POJ 2750 Potted Flower(线段树的区间合并)

    点我看题目链接 题意 : 很多花盆组成的圆圈,每个花盆都有一个值,给你两个数a,b代表a位置原来的数换成b,然后让你从圈里找出连续的各花盆之和,要求最大的. 思路 :这个题比较那啥,差不多可以用DP的 ...

  9. eclipse+maven搭建cxf webservice 完整例子

    开发环境是eclipse , maven. 在开发java webservice时,有两个比较流行的框架:axis2和cxf.cxf可以无缝的和spring集成,而axis2需要打包成aar文件,在t ...

  10. MySQL查询原理及其慢查询优化案例分享(转)

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更 好的使用它,已经成为开发工程师的必修课,我们经常会从职 ...