日志,应该是一个应用软件的基础功能之一。

使用java语言,必然会使用一个日志库,我使用的是log4j的日志库。网上不少文章都有介绍,但是结合logger的不同功能介绍以及示例介绍的清楚的不多,至少我也是翻了不少网页,然后根据实验才得出这些功能。

我觉得log4j中主要有2个概念:logger、appender。

logger是日志组件的主要概念,用于指定不同的包使用不同的日志级别,或者指定一个logger组件,以便在使用的时候可以使用getLogger(组件名)的方式获取该logger的定义。logger中主要指定一个日志级别,以及数个具体的记录器appender,这样程序中就可以选用哪些记录器进行记录日志,以及记录什么级别的日志。

appender是具体执行记录日志到文件或者终端的组件。

多logger组件的使用方式

getLogger(参数),如果参数可以在配置文件中找到对应的logger,则使用该logger,如果找不到,则使用rootlogger。

代码使用方式很简单,在java工程中引入如下库

package logStudy;

import org.apache.log4j.Logger;

public class useLog4J {

public static Logger logger1 = Logger.getLogger(useLog4J.class);

public static Logger logger2 = Logger.getLogger("logStudy");

public static void main(String[] args) {

int i =100;

while(i>0) {

logger1.debug("这是一条测试log的数据,级别应该是debug");

logger1.debug("这是一条测试log的数据,级别应该是debug");

logger1.info("这是一条测试log的数据,级别info");

logger1.info("这是一条测试log的数据,级别info");

logger1.info("这是一条测试log的数据,级别info");

logger1.debug("这是一条测试log的数据,级别应该是debug");

logger1.warn("这是一条测试log的数据,级别应该是warn");

i--;

}

logger2.debug("logger2 debug");

logger2.info("logger2 info");

logger2.warn("logger2 warn");

logger2.fatal("logger2 fatal");

}

}

以上代码中,使用了两个logger组件,主要是为了演示两者的区别,logger1是使用的rootlogger的内容,而logger2使用的是名为logStudy的logger,这个logger使用的只是CONSOLE,以下配置会有介绍。

log4j的使用代码很简单明了,主要工作是在配置文件中,即log4j.properties中的配置,示例中的配置示例如下。

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

### 设置级别和目的地(这里多个目的地) ###

log4j.rootLogger = INFO,CONSOLE,HelloLog,Hello2Log

### 第一个用处,默认这里的logStudy是包,也就是在这个包记录日志时,是只记录WARN及以上级别的日志.

### 第二个用处,可以在程序中任何地方,通过Logger.getLogger("logStudy")主动使用这个名为logStudy的logger。

log4j.logger.logStudy=WARN,CONSOLE

### 配置日志信息输出目的地Appender,此处第一个appender名为CONSOLE,使用的输出方式为org.apache.log4j.ConsoleAppender,即输出到控制台

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Target = System.out

log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

#输出格式,具体格式内容可以网上查找

log4j.appender.CONSOLE.layout.ConversionPattern = %c %d{ABSOLUTE} %5p %c{1}:%L - %m%n

#每天创建一个日志

log4j.appender.HelloLog = org.apache.log4j.DailyRollingFileAppender

log4j.appender.HelloLog.File =.\\log\\debug.log

#log4j.appender.HelloLog.File =/var/log/debug.log

log4j.appender.HelloLog.Append = true

## 只输出DEBUG级别以上的日志

log4j.appender.HelloLog.Threshold = INFO

#'.'yyyy-MM-dd: 每天产生一个新的文件

log4j.appender.HelloLog.DatePattern = '.'yyyy-MM-dd

log4j.appender.HelloLog.layout = org.apache.log4j.PatternLayout

log4j.appender.HelloLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n

log4j.additivity.logStudy = false #不继承根rootLogger,这样就不会把日志输出到rootLogger中指定的appender中。

#当文本文件为3KB大时新建一个文件

log4j.appender.Hello2Log = org.apache.log4j.RollingFileAppender

log4j.appender.Hello2Log.File =.\\log\\debug2.log

#log4j.appender.Hello2Log.File =/var/log/debug.log

log4j.appender.Hello2Log.Append = true

## 只输出DEBUG级别以上的日志

log4j.appender.Hello2Log.Threshold = INFO

log4j.appender.Hello2Log.MaxFileSize = 2KB

log4j.appender.Hello2Log.MaxBackupIndex = 5

#'.'yyyy-MM-dd: 每天产生一个新的文件

log4j.appender.Hello2Log.layout = org.apache.log4j.PatternLayout

log4j.appender.Hello2Log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n

以下内容为每个介绍:

1、log4j.rootLogger

log4j.rootLogger= [ level ] , appenderName, appenderName2,...

level:是log4j的日志级别,优先级从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG、ALL。appenderName:就是指定日志信息输出到哪个地方。

2、 配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

其中,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3、设置好appender后,针对appender的配置

也就是设置好要输出到什么地方后,其它配置选项,很多配置选项是相同的,每个appender类型有一些特别的选项

1.ConsoleAppender选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

Target=System.err:默认情况下是:System.out,指定输出控制台

2.FileAppender 选项

File=log.txt:指定消息输出到log.txt文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

3.DailyRollingFileAppender 选项

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

DatePattern=’.’yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。

4.RollingFileAppender 选项

MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件

MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

4.输出格式介绍

日志输出格式,所用到的参数如下,按需添加:

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,

%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%r: 输出自应用启动到输出该log信息耗费的毫秒数

%c: 输出日志信息所属的类目,通常就是所在类的全名

%t: 输出产生该日志事件的线程名

%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

%%: 输出一个”%”字符

%F: 输出日志消息产生时所在的文件名称

%L: 输出代码中的行号

%m: 输出代码中指定的消息,产生的日志具体信息

%n: 输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

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字符,就从左边交远销出的字符截掉。

log4j.logger java_log4j的多logger记录日志的简明使用相关推荐

  1. python logger handler_Python中的logger和handler到底是个什么鬼

    最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法.跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多东西.典型的日志记录的步骤是这样的: 创 ...

  2. python logger.debug_python中的logger模块详细讲解

    logger 提供了应用程序可以直接使用的接口 handler将(logger创建的)日志记录发送到合适的目的输出 filter提供了细度设备来决定输出哪条日志记录 formatter决定日志记录的最 ...

  3. python logger日志级别_Python logger日志

    1.日志级别有哪些? 日志等级 描述 DEBUG 最详细的日志信息,典型应用场景是 问题诊断 INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 ...

  4. org.apache.log4j.Logger详解

    1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开 ...

  5. java logger 格式_org.apache.log4j.Logger详解

    1.概述 1.1.背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环 ...

  6. log4j logger,Threshold,additivity细节注意

    log4j使用比较简单,但是有许多需要注意的事项,这些事情不清楚经常会有日志出不来的问题,本文列举了常见的一些问题,阅读本文需要有一些log4j的使用经验. 1.log4j下载,本文使用了slf4j作 ...

  7. Log4j使用技巧——让子类使用父类中定义的Logger

    关于Log4j,是一个很庞大的话题,在这里,我不能对其特点和使用方法进行一一描述,只想记录自己在使用Log4j开发项目的过程中遇到的一些问题和自己的解决方案. 在项目中,有时候会遇到这么一种情况,我们 ...

  8. Log4j的自定义logger

    自定义Logger # RootLogger配置 log4j.rootLogger = trace,console# 自定义Logger log4j.logger.com.itheima = info ...

  9. 关于log4j root logger 标签 以及additivity 属性

    <logger>标签的作用:为不同的包使用不同的log配置. 如配置了  <logger name="com.runway" additivity="f ...

最新文章

  1. 深入Java虚拟机之虚拟机体系结构
  2. html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求
  3. 邮件Web客户端相关
  4. java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序
  5. 成本中心主数据屏幕增强
  6. facebook 图像比赛_使用Facebook的Detectron进行图像标签
  7. leetcode1039. 多边形三角剖分的最低得分(动态规划)
  8. 《大数据》杂志——大数据容灾备份技术挑战和增量备份解决方案
  9. POI读取Excel内容格式化
  10. cocos2dx android运行Luac编译后的lua代码
  11. Java动态绑定与多态
  12. 运行时库(runtime library)
  13. 系统分析师 考试大纲
  14. 小柯印前设计师(DrawVBA)及教程
  15. 【加拿大留学】蒙特利尔中国公派学者 学生学习生活指南【蒙特利尔留学必看,第一次出国必看】
  16. java 支持哪些字体_java有哪些字体
  17. 弘辽科技:拼多多新手该如何提升直通车权重?
  18. IO流-常用的IO流总结
  19. cdq分治和整体二分
  20. 基于CANVAS与MD5的客户端生成验证码

热门文章

  1. 进化算法_遗传算法相关资料
  2. 泪目!兰大硕导的《致谢》火了:我从来不曾优秀过,也从来不曾放弃过!
  3. 覆盖近2亿篇论文还免费!沈向洋旗下团队「读论文神器」登B站热搜
  4. 带动画效果的卷积神经网络的讲解.pptx
  5. 悉尼科技大学入选 CVPR 2021 的 9 篇论文,都研究什么?
  6. 引进博士:118万安家房补+18万经费;硕士:42万安家房补+10万经费
  7. 每年“骗”马云10亿,被骂大忽悠,他却当选中国工程院院士?
  8. 清华大学为何把突出贡献奖颁给他?看完这个我就懂了
  9. fastText实现文本分类
  10. JSP第二次作业_5小题