log4j结构图:

结构图展现出了log4j的主结构。
logger:表示记录器,即数据来源;
appender:输出源,即输出方式(如:控制台、文件。。.)
layout:输出布局

Logger机滤器:
常用级别的划分:Debug,Info,Warn,Error,Fatal
这5个级别由低到高,如果配置的级别为"INFO"那么"Debug"级别的信息则不会显示"依次类推。

示例代码:

@Test
public void testLevel() {
log.debug("Debug message"); //调试信息
log.info("Info message"); //一般信息
log.warn("Warn message"); //警告信息
log.error("Error message"); //错误信息
log.fatal("Fatal message "); //致命错误信息
}

配置:

#debug 日志级别 stdOut 为输出源
log4j.rootLogger=debug, stdOut
#ConsoleAppender 表示控制台输出
log4j.appender.stdOut=org.apache.log4j.ConsoleAppender
#PatternLayout 默认输出的布局
log4j.appender.stdOut.layout=org.apache.log4j.PatternLayout

运行结果:

如果日志级别为:debug
Debug message
Info message
Warn message
Error message
Fatal message 
如果日志级别为:info
Info message
Warn message
Error message
Fatal message

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

Appender输出源:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

1.ConsoleAppender选项:
Threshold=DEBUG:指定日志消息的输出最低层次。(根据优先级别输出Debug以上的信息)
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
encoding=UTF-8:指定编码,默认为操作系统默认编码。
Target=System.err:默认情况下是:System.out,指定输出控制台。

2.FileAppender 选项:
Threshold=DEBUF:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
encoding=UTF-8:指定编码,默认为操作系统默认编码。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

3.DailyRollingFileAppender 选项 
Threshold=WARN:指定日志消息的输出最低层次。 
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
encoding=UTF-8:指定编码,默认为操作系统默认编码。
File=mylog.txt:指定消息输出到mylog.txt文件。 
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 
DatePattern=''.''yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下: 
1)''.''yyyy-MM: 每月 
2)''.''yyyy-ww: 每周 
3)''.''yyyy-MM-dd: 每天 
4)''.''yyyy-MM-dd-a: 每天两次 
5)''.''yyyy-MM-dd-HH: 每小时 
6)''.''yyyy-MM-dd-HH-mm: 每分钟

4.RollingFileAppender 选项
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

5.WriterAppender选项:
Threshold=DEBUG:指定日志消息的输出最低层次。(根据优先级别输出Debug以上的信息)
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
encoding=UTF-8:指定编码,默认为操作系统默认编码。

Layout输出内容格式:
org.apache.log4j.PatternLayout(可以灵活地指定布局模式,自定义布局),
org.apache.log4j.HTMLLayout(以HTML表格形式布局,纯HTML文本),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)。

PatternLayout是可自定义格式的,其他三个为系统提供的固定格式。
自定义配置:
log4j.appender.stdOut.layout=org.apache.log4j.PatternLayout
log4j.appender.stdOut.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

关于ConversionPattern参数含义的解释:

1.每一部分都以%开头,以空格分隔
2."-"表示左对齐,默认为右对齐
3.%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},
4.%r: 输出自应用启动到输出该log信息耗费的毫秒数
5.%t: 输出产生该日志事件的线程名
6.%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
7.%%: 输出一个"%"字符
8.%c: 输出日志信息所属的类目,通常就是所在类的全名
9.%F: 输出日志消息产生时所在的文件名称
10.%L: 输出代码中的行号
11.%m: 输出代码中指定的消息,产生的日志具体信息
12.%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。
13.%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
14.在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
  1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
  2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
  3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

  配置:log4j.appender.stdOut.layout.ConversionPattern=%20r %d %m%n
  " 0 2013-03-05 10:57:41,546 Debug message"
  配置:log4j.appender.stdOut.layout.ConversionPattern=%-20r %d %m%n
  "0 2013-03-05 10:58:10,875 Debug message"
15.%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉,如果是负号则相反。

原文链接:Log4j简单学习笔记

Log4j简单学习笔记的更多相关文章

  1. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  2. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  3. <<C++标准程序库>>中的STL简单学习笔记

    0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...

  4. Mongoose简单学习笔记

    1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Mo ...

  5. Linux——bash应用技巧简单学习笔记

    本人是看的lamp兄弟连的视频,学习的知识做一下简单,如有错误尽情拍砖. 命令补齐 命令补齐允许用户输入文件名起始的若干个字 母后,按<Tab>键补齐文件名. 命令历史 命令历史允许用户浏 ...

  6. Oracle简单学习笔记

    创建用户 CREATE USER username identified by password;//这是最简单的用户创建SQL语句. CREATE USER username identified ...

  7. Linux——软件包简单学习笔记

    Linux中的是那种软件包:  (这里学习是基于redHat的Cent-OS) 1: 二进制软件包管理(RPM.YUM) 2:源代码包安装 3: 脚本安装(Shell或Java脚本) 一: 二进制软件 ...

  8. Linux——vim/vi 简单学习笔记

    Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件.Vim/Vi 没有菜单,只有命令. 早前也用过Vim变过C++/C的代码, ...

  9. OI动态规划&&优化 简单学习笔记

    持续更新!! DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点. DP的类型 序列DP [例题]BZOJ2298 problem a 数位DP 常用来统计或者查找一个区间满足条件的 ...

随机推荐

  1. Android 学习心得 快速排序

    快速排序(Quicksort) 是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...

  2. 我的Android第五章:通过Intent实现活动与活动之间的交互

    Intent在活动的操作 作用: Itent是Android程序中各个组件直接交换的一个重要方式可以指定当前组件要执行任务同时也可以给各个组件直接进行数据交互              同时Inten ...

  3. android 动画效果

    动画资源 一.分类: (一).概要:         3.0以前,android支持两种动画模式,补间动画(tween animation),帧动画(frame animation),在android ...

  4. 【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)

    Change Log: 2015.08.20 - 添加podspec文件更新方法 2015.08.19 - 首次发布 概述 关于CocoaPods的介绍不在本文的主题范围内,如果你是iOS开发者却不知 ...

  5. iOS 摇一摇的功能

    效果如下 相关素材 相关代码如下 #import "ShakeViewController.h" #import <AudioToolbox/AudioToolbox.h&g ...

  6. Android Bitmap占用内存计算公式

    Android对各分辨率的定义 当图片以格式ARGB_8888存储时的计算方式 占用内存=图片长*图片宽*4字节 图片长 = 图片原始长 (设备DPI/文件夹DPI)  图片宽 = 图片原始宽(设备D ...

  7. 关于final关键字和抽象类,接口

    final主要用于修饰类,方法以及属性 当用于修饰类时,则这个类不能被子类继承,换而言之该类没有子类 当用于修饰方法时,该方法也是不能被复写的 当用于修饰属性时,同理属性值不能被更改 抽象类,当存在抽 ...

  8. python之局部变量引用赋值前的结果

    通过正则表达式,实现加减 昨晚在做计算器的时候,被一个BUG搞懵比了.现在再看看,发现我好小白啊~~ #++- num = input("please input:") sa = ...

  9. Javascript如何实现AOP

    简介: AOP(面向切面的编程)是为了解决功能的独立性与可维护性而提供的一种编程思想.当多个函数大量重复使用同一个功能时通过分层切分,将功能平衡的划分,从而提高低耦合性. JS中实现: index.h ...

  10. Android应用开发基础之十二:版本控制

    为什么需要版本控制? 场景1: 你的代码正常工作 你改了其中的几行代码 程序出了问题 你把代码改回来 程序还是不能正常工作——为什么? 场景2: 你的程序昨天还能正常运行 昨天晚上你修改了很多内容,做 ...