一、概念

  1. .1.
  2. log4j 是线程安全的 日志框架,高度可配置,可通过在运行时的外部文件配置。
  3. 默认情况下,日志管理在CLASSPATH 查找一个名为 log4j.properties 的文件。
  4. 配置文件支持UNIX风格的变量替换,如 ${variableName}。
  5. 配置文件中,
  6. rootLogger是新的使用名称,对应Logger
  7. rootCategory是旧的使用名称,对应原来的Category
  8. Logger类是Category类的子类,所以,rootCategory是旧的用法,不推荐使用。
  9. .2.
  10. Logger类:完成日志记录,设置日志信息级别
  11. Appender类:决定日志去向,终端、DB、硬盘
  12. Layout类:决定日志输出的样式,例如包含当前线程、行号、时间
  13.  
  14. .3.
  15. Appender类的属性
  16. layout Appender使用布局Layout 对象和与之相关的格式化的日志记录信息转换模式
  17. target 目标可以是一个控制台,一个文件,或根据附加器的另一个项目
  18. level 级别是必需的,以控制日志消息的过滤
  19. threshold Appender可以有与之独立的记录器级别相关联的级别阈值水平。Appender忽略具有级别低于阈级别的任何日志消息
  20. filter Filter 对象可以分析超出级别的匹配记录信息,并决定是否记录的请求应该由一个特定 Appender 或忽略处理。

二、简单实践

  1. 0、需要的jar文件:log4j-1.2.17.jar
  2. 配置文件命名:log4j.properties ,放在src目录下。
  3. 1、得到以类名称为名字的日志记录器:
    static Logger log = Logger.getLogger(log4jExample.class.getName());
  4. 2、加载配置文件
  5. 如果配置文件在类目录,可省略此步骤,但建议用绝对路径加载;
  6. // 可以正确获得资源文件log4j.properties的绝对路径
  7. PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));
  8. 3、开始记录
  9. log.error("Hello this is an error message");
  10. log.debug("Hello this is an debug message");
  11. log.info("Hello this is an info message");
  12. 4、配置文件示例
  13. # Define the root logger with appender file
  14. # log 是临时变量, 会替换 ${log}
  15.   log = D:/log4j
  16. log4j.rootLogger = DEBUG, FILE
  17.  
  18. # Define the file appender
  19. log4j.appender.FILE=org.apache.log4j.FileAppender
  20. log4j.appender.FILE.File=${log}/log.out
  21.  
  22. # Define the layout for file appender
  23. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
  24. log4j.appender.FILE.layout.conversionPattern=%m%n

三、一些说明

  1. 6Logger
  2. Logger类不允许实例化一个新的记录器实例,但它提供了两个静态方法获得一个 Logger 对象:
  3. public static Logger getRootLogger();//返回应用程序实例根记录器
  4. public static Logger getLogger(String name);//记录器名称通常是类或包的名称
  5.  
  6. 7、日记级别
  7. org.apache.log4j.Level
  8. 级别: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
  9. 代码设定级别用 log.setLevel(Level.WARN);
  10.  
  11. 8、格式化
  12. 布局对象可以根据各种布局格式记录数据,抽象类org.apache.log4j.Layout,是 log4j API 中的所有其他布局类的基类。
  13. 子类有:
  14. HTMLLayout(以HTML表格形式布局)优势是,它可以被发布为网页,远程查看
  15. SimpleLayout(包含日志信息的级别和信息字符串)
  16. TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
  17. PatternLayout(可以灵活的指定布局格式,常用)
  18. DateLayout
  19. XMLLayout
  20. 布局方法:
  21. public abstract boolean ignoresThrowable()
  22. 日志信息是否处理传递给它的日志记录事件的一部分,任何 java.lang.Throwable 对象。
  23. 如果布局对象处理 Throwable 对象,那么布局对象不忽视它,并返回false
  24. public abstract String format(LoggingEvent event) 子类重写,实现布局格式
  25. public String getContentType() 返回使用的布局的对象的内容类型。基类将返回 text/plain 作为默认的内容类型
  26. public String getFooter() 指定日志消息的页脚信息
  27. public String getHeader() 指定日志消息的标头信息
  28. 9HTMLLayout 可以提供:
  29.   生成特定的日志事件之前,从应用程序的开始所经过的时间;
  30.   调用该记录请求的线程的名称;
  31.   与此记录请求相关联的级别;
  32.   日志记录器(Logger)和记录消息的名称;
  33.   可选程序文件的位置信息,并从其中记录被调用的行号。
    有方法:
  34.   setContentType(String) 设置 text/html HTML内容的内容类型。默认为 text/html
  35.   setLocationInfo(String) 设置位置信息记录事件。默认为 false
  36.   setTitle(String) 设置为HTML文件的标题。默认值是Log4j的日志信息
  37.  
  38. 10、日志记录到文件
  39. org.apache.log4j.FileAppender。有以下配置参数:
  40. immediateFlush 标志的默认设置为true,输出流实时刷新
  41. encoding 它可以使用任何字符编码。默认情况下是特定于平台的编码方案
  42. threshold 这个 appender 阈值级别
  43. Filename 日志文件的名称
  44. fileAppend 默认设置为true,信息被附加到同一文件的末尾
  45. bufferedIO 此标志表示是否需要写入缓存启用。默认设置为false
  46. bufferSize 如果 bufferedI/O 启用,这表示缓冲区的大小,默认设置为8KB
  47.  
  48. 日志记录到多个文件:org.apache.log4j.RollingFileAppender类。
  49. 文件大小达到一定的阈值,分成多个文件。
  50. 配置参数maxFileSize 上述的文件的回滚临界尺寸。默认值是10MB
  51. maxBackupIndex 此属性表示要创建的备份文件的数量。默认值是1
  52.  
  53. 每天生成日志文件:org.apache.log4j.DailyRollingFileAppender类。
  54. 重要的下列配置参数:
  55. DatePattern 这表示在滚动的文件,并按命名惯例来执行。默认情况下,在每天午夜滚动。
  56. 滚动的含义是,
  57. 每个时间段过去后,再已此时间段命名文件(用于以后索引查看),
  58. 时间段正在进行时,是当前日志命名。
  59. DatePattern控制使用下列滚动的时间表方式之一:
  60. DatePattern 描述
  61. '.' yyyy-MM 滚动在每个月的结束和下一个月初
  62. '.' yyyy-MM-dd 这是默认值,每天午夜滚动
  63. '.' yyyy-MM-dd-a 滚动每一天的午夜和中午
  64. '.' yyyy-MM-dd-HH 滚动在每一个小时
  65. '.' yyyy-MM-dd-HH-mm 滚动在每一个分钟
  66. '.' yyyy-ww 滚动每个星期取决于区域设置时的第一天
  67.  
  68. 11、日志记录到数据库 ,具体配置略
  69. org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库。
  70. bufferSize 设置缓冲区的大小。默认大小为1
  71. driver 设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcOdbcDriver
  72. layout 设置要使用的布局。默认布局是org.apache.log4j.PatternLayout
  73. password Sets the database password.
  74. sql 指定SQL语句在每次记录事件发生的时间执行。这可能是INSERTUPDATEDELETE
  75. URL 设置JDBC URL
  76. user 设置数据库用户名

四、常见配置说明

  1. log4j.rootLogger=日志级别,appender1, appender2, ….
  2. 日志级别:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。不区分大小写
  3. 注意,需在控制台输入,只需将其中一个appender定义为stdout即可;
  4. 注意,rootLogger默认是对整个工程生效
  5. 注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效
  6. 注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}
  7.  
  8. log4j.appender.appender1=org.apache.log4j.日志输出到哪儿
  9. ConsoleAppender(控制台)
  10. FileAppender(文件)
  11. DailyRollingFileAppender(每天产生一个日志文件)
  12. RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
  13. WriteAppender(将日志信息以流格式发送到任意指定的地方)
  14. JDBCAppender(将日志信息保存到数据库中)
  15.  
  16. log4j.appender.appender1.File=文件目录及文件
  17.  
  18. log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式
  19. 例如,'.'yyyy-MM-dd
  20.  
  21. log4j.appender.appender1.layout=org.apache.log4j.日志布局格式
  22. HTMLLayout(以HTML表格形式布局)
  23. SimpleLayout(包含日志信息的级别和信息字符串)
  24. TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
  25. PatternLayout(可以灵活的指定布局格式,常用)
  26.  
  27. log4j.appender.appender1.layout.ConversionPattern=日志输出格式
  28. 例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
  29. %c 输出日志信息所属的类的全名
  30. %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 221028
  31. %f 输出日志信息所属的类的类名
  32. %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
  33. %m 输出代码中指定的信息,如log(message)中的message
  34. %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n
  35. %p 输出优先级,即DEBUGINFOWARNERRORFATAL。如果是调用debug()输出的,则为DEBUG,依此类推
  36. %r 输出自应用启动到输出该日志信息所耗费的毫秒数
  37. %t 输出产生该日志事件的线程名

Log4j 汇总的更多相关文章

  1. java 日志技术汇总(log4j , Commons-logging,.....)

    前言 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一 在系列一 中, 有一个问题一直没有解决,就是部署到weblogic 中应用程序如何通过log4j写日志到文件中? 这里仅 ...

  2. Log4j知识汇总

    Log4j在java开发中还是很常见的,而在日志系统里面也占有举足轻重的地位,想要做好日志相关的工作,了解log4j还是很必要的. 下面就针对 log4j的官方文档user-guide 进行翻译与整理 ...

  3. C#开源系统大汇总(个人收藏)

    C#开源系统大汇总 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...

  4. Log4j源代码学习

    了解log4j的源代码来源于项目中一次需求,我们想将系统所有的warn日志统一收集到common-warn.log的日志中去,以便于系统对其进行监控处理.于是模拟自动生成的error配置完成了warn ...

  5. C#开源资源大汇总

    C#开源资源大汇总     C#开源资源大汇总 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行 ...

  6. iOS、mac开源项目及库汇总

    原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499    iOS每日一记------------之 中级完美大整理 iOS.m ...

  7. ELK(ElasticSearch, Logstash, Log4j)系统日志搭建

    1.elk平台介绍 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logsta ...

  8. Kafka各个版本差异汇总

    Kafka各个版本差异汇总   从0.8.x,0.9.x,0.10.0.x,0.10.1.x,0.10.2.x,0.11.0.x,1.0.x或1.1.x升级到2.0.0 Kafka 2.0.0引入了线 ...

  9. 转:log4j的使用简介

    spring使用log4j,可以有2种方法. 1.在web.xml里不做任何配置. log4j.properties放在classpath根目录下, 这时候生成的日志文件就没有相对路径,如果写相对路径 ...

随机推荐

  1. Linux相关面试题&答案

    Linux相关面试题&答案 Linux面试题&答案 假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] " ...

  2. raspberry pi install iceweasel

    sudo apt-get update sudo apt-get upgrade sudo apt-get install iceweasel

  3. C++ 代码风格准则:POD

    作者:一根筋的傻瓜链接:https://www.zhihu.com/question/36379130/answer/69853366来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  4. Android使用SeekBar

    转自:http://my.oschina.net/pingdy/blog/376735 最近有做一个android项目,里面有使用到在播放视频时可以跳播,同时动态显示播放时间.类似于下图 的效果,我只 ...

  5. jquery mobile 的loading提示“正在加载...”在不同版本中的不同实现方式

    在jquery mobile开发中,在页面的切换.或者ajax获取数据时由于网速慢等其他原因,会有一个加载的时间,如果能在这段时间给一个“正在加载...”的提示,用户体验会更好.下面来简单的介绍一下在 ...

  6. 事件总线框架---Otto

    我们假设这样一种业务场景,现在在做一款及时聊天应用,我们在聊天页面进行收发信息,同时也要实时更新前一页面的聊天记录,这时我们该如何去实现?说说我以前的实现策略,我使用的是广播接收器BroadCastR ...

  7. gsub

    gsub("([ab])", "\\1_\\1_", "abc and ABC")[1] "a_a_b_b_c a_a_nd AB ...

  8. HTML5学习笔记3 内联SVG

    HTML5支持内联SVG 下面来介绍一下什么是SVG SVG可缩放矢量图形 可缩放矢量是基于可扩展标记语言(标准通用语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准 ...

  9. Linux上寻找并杀死僵尸进程

    转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...

  10. USB3.0测试和使用说明

    概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3.该芯片性能强劲,功能强大,接口简单,非常适合用于各种需要高速数 ...