Log4j三大组件

1) 日志记录器Logger
负责输出日志信息,并能够对日志信息进行分类筛选,决定哪些日志信息应该被输出,哪些该被忽略。Loggers组件输出日志信息时分为5个级别:DEBUG、INFO、WARN、ERROR、FATAL。这五个级别的顺序是:DEBUG<INFO<WARN<ERROR<FATAL。如果设置某个Logger组件的级别是P,则只有级别等于或高于P的日志信息才能输出。Logger有继承关系,最上层是rootLogger,定义的其他Logger都会继承rootLogger

2) 输出配置Appender
定义日志输出目的地,输出的目的地可以是控制台、文件或网络设备

3) 格式化器Layout
通过在Appender的后面附加Layout来实现日志格式化输出

一个Logger可以包含多个Appender,每个Appender对应一个Layout

通过在项目中创建 log4j.properties 文件来配置log4j,项目启动时会自动检索项目内全部文件找到该配置文件

Logger

Logger的定义格式:
log4j.rootLogger=level,appenderName,appenderName,...
log4j.logger.packageName=level,appenderName,appenderName,...

level是日志的输出最低级别
appenderName是日志信息的输出目的地,可以同时定义多个输出目的地
packageName是对单个包路径下的全部类配置单独的日志输出目的地

Appender

Appender的定义格式:
log4j.appender.appenderName=fully.qualified.name.of.appender.class
其中 fully.qualified.name.of.appender.class 可以指定如下五种之一:

org.apache.log4j.ConsoleAppender

将日志输出到控制台,选项:
1)Threshold=WARN:指定日志消息的输出最低级别
2)ImmediateFlush=true:默认为true,意味着所有的消息都会立即输出
3)Target=System.err:默认为System.out,指定输出控制台

org.apache.log4j.FileAppender

将日志输出到文件,选项:
1)Threshold=WARN:指定日志消息的输出最低级别
2)ImmediateFlush=true:默认为true,意味着所有的消息都会立即输出
3)File=logFile.log:指定消息输出到logFile.log文件
4)Append=false:默认为true,即将消息追加到指定文件,false将消息覆盖指定的文件

org.apache.log4j.DailyRollingFileAppender

每天产生一个日志文件,选项:
1)Threshold=WARN:指定日志消息的输出最低级别
2)ImmediateFlush=true:默认值是true,意味着所有的消息都会立即输出
3)File=logFile.log:指定消息输出到logFile.log文件
4)Append=false:默认值是true<即将消息追加到指定文件,false将消息覆盖指定的文件
5)DatePattern='.'yyyy-MM-dd:每天产生一个新文件,还可以指定其他方式:
'.'yyyy-MM: 每月
'.'yyyy-ww: 每周
'.'yyyy-MM-dd: 每天
'.'yyyy-MM-dd-a: 每天两次
'.'yyyy-MM-dd-HH: 每小时
'.'yyyy-MM-dd-HH-mm: 每分钟

org.apache.log4j.RollingFileAppender

文件大小到达指定尺寸时产生一个新的文件,选项:
1)Threshold=WARN:指定日志消息的输出最低级别
2)ImmediateFlush=true:默认值是true,意味着所有的消息都会被立即输出
3)File=logFile.log:指定消息输出到logFile.log文件
4)Append=false:默认值是true,即将消息追加到指定文件中,false指将消息覆盖指定的文件
5)MaxFileSize=100KB: 后缀可为KB、MB、GB,在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logFile.log.1文件
6)MaxBackupIndex=2:指定可产生的滚动文件的最大数量

org.apache.log4j.WriterAppender

将日志信息以流格式发送到任意指定的地方

Layout

Layout的定义格式:

第一部分:

log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class
其中 fully.qualified.name.of.layout.class 可以指定如下4种之一:

org.apache.log4j.HTMLLayout

以HTML表格形式布局,选项:
1)LocationInfo=true:输出java文件名称和行号,默认为false
2)Title=my app file: 默认值是 Log4J Log Messages

org.apache.log4j.PatternLayout

可以灵活地指定布局模式,选项:
1)ConversionPattern=%m%n :指定消息格式化方式

org.apache.log4j.SimpleLayout

包含日志信息的级别和信息字符串,选项:
1)LocationInfo=true:输出java文件和行号,默认为false

org.apache.log4j.TTCCLayout

包含日志产生的时间、线程、类别等等信息

第二部分:
log4j.appender.appenderName.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ss.SSS} %c %m%n

每个符号含义:
1) -X: 输出时左对齐
2) %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL
3) %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,
              例如:%d{yyyy-MM-dd HH:mm:ss.SSS},输出:2010-10-10 22:10:28.921
4) %r: 输出自应用启动到输出该log信息耗费的毫秒数
5) %c: 输出日志信息所属的类目,通常就是所在类的全名
6) %t: 输出产生该日志事件的线程名
7) %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数,
             例如:Testlog4.main(TestLog4.java:10)
8) %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中
9) %%: 输出一个"%"字符
10)%F: 输出日志消息产生时所在的文件名称
11)%L: 输出代码中的行号
12)%m: 输出代码中指定的消息,产生的日志具体信息
13)%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.appender.A1.File=./Sample.log
其中.号表示项目根目录

使用 ${APP_HOME_PATH} 的方式来使用系统变量设置日志输出路径,例如:
#设定系统变量:
System.setProperty("LOG_PATH", "D:/");

#可以在log4j中使用该变量来确定输出路径
log4j.appender.A1.File=${LOG_PATH}/Sample.log

其中当使用tomcat服务器时,tomcat启动时自带系统变量:${catalina.home},可以直接在log4j配置文件中使用

实例

 #定义3个输出目的地
log4j.rootLogger=INFO,A1,A2,A3 #定义A1输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n #定义A2输出到文件
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=./Sample.log
log4j.appender.A2.MaxFileSize = 1KB
log4j.appender.A2.MaxBackupIndex = 3
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n #定义A3输出到数据库
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/dbName
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
#定义A3的写数据库执行的SQL语句
log4j.appender.A3.layout.ConversionPattern=INSERT INTO log4j(createDate,thread,level,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')

写到数据库时需要先创建好表:

 create table log4j
(
logId int not null auto_increment,--流水号
createDate varchar(45) default null,--日志生成时间
thread varchar(45) default null,--当前线程
level varchar(45) default null,--当前日志的级别
class varchar(45) default null,--生成日志的类
message varchar(245) default null,--日志具体信息 primary key(logId)
)

对不同的包设置不同的日志输出方式:

 #定义默认为输出到控制台
log4j.rootLogger=INFO,default
log4j.appender.default=org.apache.log4j.ConsoleAppender
log4j.appender.default.layout=org.apache.log4j.PatternLayout
log4j.appender.default.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#定义com.code包下的类的日志都输出到文件
log4j.logger.com.code=WARN
log4j.appender.com.code=org.apache.log4j.RollingFileAppender
log4j.appender.com.code.File=./Sample.log
log4j.appender.com.code.MaxFileSize = 1KB
log4j.appender.com.code.MaxBackupIndex = 3
log4j.appender.com.code.layout=org.apache.log4j.PatternLayout
log4j.appender.com.code.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

Log4j介绍与使用的更多相关文章

  1. log4j介绍以及使用教程

    一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接 口服务 器.NT的事件记录器.UNIX Syslog ...

  2. Java框架spring 学习笔记(十三):log4j介绍

    功能 日志功能,通过log4j可以看到程序运行过程的详细信息. 使用 导入log4j的jar包 复制log4j的配置文件,复制到src下面   3.设置日志级别 info:看到基本信息 debug:看 ...

  3. log4j介绍

    log4j.properties文件的三种加载方式 1.默认自动加载 满足以下条件时: 1).配置文件名为log4j.properties 2).在classpath根目录下(即resources根目 ...

  4. log4j介绍和使用

    1.apache推出的开源免费日志处理的类库 2.为什么需要日志?? 2.1 在项目中编写system.out.println();输出到控制台,当项目发布到tomcat后,没有控制台(在命令界面能看 ...

  5. Log4j介绍,log4j.properties配置详解

    http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html本文主要解释log4j的配置文件各个配置项的含义,内容是从网上转载的 1.Log ...

  6. commons-logging和log4j

    1.Apache通用日志接口(commons-logging.jar)介绍 Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logger, ...

  7. log4j总结

    log4j介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sysl ...

  8. log4j个人使用整理

    Log4j介绍: 略过. 配置: Eclipse项目中添加log4j.jar到lib下. 在bin目录下新建log4j.properties,编辑好log4j配置文件. 样例分析: log4j.roo ...

  9. commons-logging log4j的联系区别

    1.Apache通用日志接口(commons-logging.jar)介绍 Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logger, ...

随机推荐

  1. Telephone Lines [POJ3662] [二分答案]

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  2. 根据两点经纬度计算距离和角度——java实现

    原理:见上一篇博客   http://blog.csdn.net/xiaobai091220106/article/details/50879365 百度地图拾取经纬度坐标:http://api.ma ...

  3. 查找已连接过的wifi密码

    无意之间看到能破解已连接过的wifi密码的诀窍,赶紧存储下来. 1. 首先打开终端 2. 在没有网路的情况下输入: netsh wlan show profiles 结果如下(自己的): 这些‘用户配 ...

  4. jdbc连接oracle时报错 Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableC

    错误: Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; ...

  5. Python练手例子(7)

    37.对10个数进行排序. 程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换. #python 3.7 if __n ...

  6. python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)

    进行协议解析时.总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上.直接上样例 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 ...

  7. Codeforces 1154 - A/B/C/D/E/F/G - (Undone)

    链接:https://codeforces.com/contest/1154 A - Restoring Three Numbers - [水] #include<bits/stdc++.h&g ...

  8. 浏览器保存数据给app读取

    https://www.jianshu.com/p/239bab24d249 https://www.jianshu.com/p/43f8a81dd8ca

  9. js表单反显

    /* * 表单自动回显js * 依赖JQURY * 使用参考:$("#form1").form("load",{"id":"112 ...

  10. linux信息收集

    1.系统区分debian系列:debian.ubunturedhat系列:redhat.centos 是否为docker.或者为虚拟机 分为通用模块.单独模块的信息获取 2.系统信息收集 内核(是否为 ...