log4j 打印线程号配置_日志配置log4j 打印线程号

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

webAppRootKey

webApp.root

log4jConfigLocation

classpath:log4j.properties

org.springframework.web.util.Log4jConfigListener

现在来看布局类的定义和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 Log4jExPatternLayoutextends 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 Log4jExPatternParserextends 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 ExPatternConverterextends PatternConverter {

public ExPatternConverter(FormattingInfo fi) {

super(fi);

}

/**

* 当需要显示线程ID的时候,返回当前调用线程的ID

*/

@Override

protected String convert(LoggingEvent event) {

return String.valueOf(Thread.currentThread().getId());

}

}

}

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

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

第一步:添加pom文件依赖 org.springframework.boot

日志配置logback

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

Log4J日志配置详解

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

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

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

(转)Log4J日志配置详解

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

java Log4j日志配置详解大全

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

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

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

Log4J日志配置详解[转]

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

Log4J日志配置与Juit测试

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

随机推荐

IL2CPP

[官方教程] IL2CPP 深入讲解系列介绍 (汇总帖) http://forum.china.unity3d.com/forum.php?mod=viewthread&tid=8960&am ...

【温故Delphi】Win32API之CreateMutex

解决问题 如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥.这个问题可以通过CreateMutex来解决. 进程互斥的核心思想:进程在启动时首先检查是否存在此进程实例,如果 ...

DEDECMS之三 首页、列表页怎么调用文章内容

一.首页调用 百度了很多,没有找到实际的解决方法,对于直接读取数据库,这种写法不会采取. 后来,仔细考虑,这部分解决的内容不会很多,所以直接使用了简介的内容 方法一(默认长度55) [field:in ...

Codeforces 578B ";Or"; Game

传送门 B. "Or" Game time limit per test 2 seconds memory limit per test 256 megabytes input s ...

Phaser.Game这个函数都有哪些参数

Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希 ...

阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房) - agapple - ITeye技术网站

阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房) - agapple - ITeye技术网站 阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)

chrome扩展应用API

background scripts可以访问所有的 WebExtension JavaScript APIs ,但是不能直接访问页面 content scripts 可以通过标准的DOM api 读取 ...

委托、匿名函数到lambda表达式

在C#2.0之前就有委托了,在2.0之后又引入了匿名方法,C#3.0之后,又引入了Lambda表达式,他们三者之间的顺序是:委托->匿名表达式->Lambda表达式,微软的一步步升级,带给 ...

洛谷P2398 GCD SUM

题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum ...

Tencent Server Web 安装试用

Tencent Server Web 安装试用 私有环境搭建,使用docker-compose 进行memcache 安装 参考github 代码 https://github.com/rongfen ...

你可能感兴趣的:(log4j,打印线程号配置)