log4j.logger java_log4j的多logger记录日志的简明使用
日志,应该是一个应用软件的基础功能之一。
使用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记录日志的简明使用相关推荐
- python logger handler_Python中的logger和handler到底是个什么鬼
最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法.跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多东西.典型的日志记录的步骤是这样的: 创 ...
- python logger.debug_python中的logger模块详细讲解
logger 提供了应用程序可以直接使用的接口 handler将(logger创建的)日志记录发送到合适的目的输出 filter提供了细度设备来决定输出哪条日志记录 formatter决定日志记录的最 ...
- python logger日志级别_Python logger日志
1.日志级别有哪些? 日志等级 描述 DEBUG 最详细的日志信息,典型应用场景是 问题诊断 INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 ...
- org.apache.log4j.Logger详解
1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开 ...
- java logger 格式_org.apache.log4j.Logger详解
1.概述 1.1.背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环 ...
- log4j logger,Threshold,additivity细节注意
log4j使用比较简单,但是有许多需要注意的事项,这些事情不清楚经常会有日志出不来的问题,本文列举了常见的一些问题,阅读本文需要有一些log4j的使用经验. 1.log4j下载,本文使用了slf4j作 ...
- Log4j使用技巧——让子类使用父类中定义的Logger
关于Log4j,是一个很庞大的话题,在这里,我不能对其特点和使用方法进行一一描述,只想记录自己在使用Log4j开发项目的过程中遇到的一些问题和自己的解决方案. 在项目中,有时候会遇到这么一种情况,我们 ...
- Log4j的自定义logger
自定义Logger # RootLogger配置 log4j.rootLogger = trace,console# 自定义Logger log4j.logger.com.itheima = info ...
- 关于log4j root logger 标签 以及additivity 属性
<logger>标签的作用:为不同的包使用不同的log配置. 如配置了 <logger name="com.runway" additivity="f ...
最新文章
- 深入Java虚拟机之虚拟机体系结构
- html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求
- 邮件Web客户端相关
- java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序
- 成本中心主数据屏幕增强
- facebook 图像比赛_使用Facebook的Detectron进行图像标签
- leetcode1039. 多边形三角剖分的最低得分(动态规划)
- 《大数据》杂志——大数据容灾备份技术挑战和增量备份解决方案
- POI读取Excel内容格式化
- cocos2dx android运行Luac编译后的lua代码
- Java动态绑定与多态
- 运行时库(runtime library)
- 系统分析师 考试大纲
- 小柯印前设计师(DrawVBA)及教程
- 【加拿大留学】蒙特利尔中国公派学者 学生学习生活指南【蒙特利尔留学必看,第一次出国必看】
- java 支持哪些字体_java有哪些字体
- 弘辽科技:拼多多新手该如何提升直通车权重?
- IO流-常用的IO流总结
- cdq分治和整体二分
- 基于CANVAS与MD5的客户端生成验证码
热门文章
- 进化算法_遗传算法相关资料
- 泪目!兰大硕导的《致谢》火了:我从来不曾优秀过,也从来不曾放弃过!
- 覆盖近2亿篇论文还免费!沈向洋旗下团队「读论文神器」登B站热搜
- 带动画效果的卷积神经网络的讲解.pptx
- 悉尼科技大学入选 CVPR 2021 的 9 篇论文,都研究什么?
- 引进博士:118万安家房补+18万经费;硕士:42万安家房补+10万经费
- 每年“骗”马云10亿,被骂大忽悠,他却当选中国工程院院士?
- 清华大学为何把突出贡献奖颁给他?看完这个我就懂了
- fastText实现文本分类
- JSP第二次作业_5小题