Appender表示日志输出到什么地方,常用的输出地有控制台,文件,数据库,远程服务器等。Log4j中内置了常用的输出地,一般情况下配置一下即可使用。所有的Appender都实现自org.apache.log4j.Appender借口。在log4j.properties中,Apender都使用log4j.appender.*配置

  输出到控制台

  控制台是最常用的输出地,前面的例子用的就是控制台输出(ConsoleAppender)。控制台输出实现类为org.apache.log4j.ConsoleAppender,例如:

#跟记录器,ERROR,输出到A1
log4j.rootLogger=ERROR, A1 #本记录器为DEBUG级别
log4j.category.com.log4j.test=DEBUG #控制台输出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#DEBUG以上级别是输出
log4j.appender.A1.Threshold=DEBUG
#编码方式
log4j.appender.A1.Encoding=UTF-8
#是否立即输出
log4j.appender.A1.ImmediateFlush=true
#使用System.err输出
log4j.appender.A1.Target=System.err
#输出格式,表达式配置
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.ConversionPattern=%-d{yyyy-MM-d HH:mm:ss, SSS}[%C]-[%p] %m%n

  控制台输出需要配置layout属性,最常用的是正则表达式。控制台输出的信息一般是TRACE,DEBUG或者INFO级的,只有在开发,调试时才启用。

  Threshold用来设置该Appender的级别,只对该Appender生效。所有的Appender都可通过设置Threshold来设置本Appender的启用级别

 输出到文件:

  文件输出(FileAppender)把日志输出到指定的文件。文件输出的实现类为org.apache.log4j.FileAppender,配置时需要File指定文件名称。可以使用相对路径,也可以使用绝对路径例如:

 1 log4j.logger.com.log4j.test.Log4jTest=DEBUG, F
2
3 #输出到文件
4 log4j.appender.F=org.apache.log4j.FileAppender
5 #文件位置
6 log4j.appender.F.File=C:\\log4j.log
7 #追加文件内容
8 log4j.appender.F.Append=true
9 #输出格式表达式
10 log4j.appender.F.layout=org.apache.log4j.PatternLayout
11 log4j.appender.F.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

  可选参数Append配置是否在原文件内容的基础上追加日志。如果为false,Logger 初始化时会先清掉文件内容,也就是说每次重启程序,原来的日志会丢失。如果为true,日志文件会越来越大。默认为true

  输出到按大小滚动文件

  按大小滚动文件输出(RollingFileAppender)吧日志输出到指定的文件,文件达到指定大小时,会自动更名。按尺寸滚动文件输出类为org.apache.log4j.RollingFileAppender,需要配置文件名称,文件的最大尺寸,例如:

 1 #DEBUG 级别,两个输出:文件与滚动文件
2 log4j.rootLooger=DEBUG, F, Rolling_File
3
4 #输出到文件
5 log4j.appender.F=org.apache.log4j.FileAppender
6 log4j.appender.F.File=C:\\F.log
7 log4j.appender.F.Appender=true
8 log4j.appender.F.layout=org.apache.log4j.PatternLayout
9 log4j.appender.F.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
10
11 #输出到滚动文件
12 log4j.appender.Rolling_File=org.apache.log4j.RollingFileAppender
13 #DEBUG以上才使用
14 log4j.appender.Rolling_File.Threshold=DEBUG
15 #滚动文件名
16 log4j.appender.Rolling_File.File=C:\\rolling.log
17 #追加方式
18 log4j.appender.Rolling_File.Append=true
19 #文件达到10KB就自动命名
20 log4j.appender.Rolling_File.MaxFileSize=10KB
21 #最多备份100个文件
22 log4j.appender.Rolling_File.MaxBackupIndex=100
23 log4j.appender.Rolling_File.layout=org.apache.log4j.PatternLayout
24 log4j.appender.Rolling_File.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

  配置的滚动文件名为rolling.log,文件最大为10KB。当rolling.log达到10KB时,会自动更名为rolling.log1,rolling.log2,rolling.log3………………知道rolling.log100。

  Logger支持多个Appender,用逗号讲多个Appender名字隔开即可。

  

  输出到按日期滚动文件

  按日期滚动文件输出(DailyRollingFileAppender)将日志输出到指定的文件,当日期发生变化时,会自动按指定的日期格式自动改名。日期滚动文件输出类为org.apache.log4j.DailyRollingFileAppender,例如:

 1 #DEBUG 级别,两个输出:文件与滚动文件
2 log4j.rootLooger=DEBUG, Daily_Rolling
3
4 #输出到滚动文件
5 log4j.appender.Daily_Rolling=org.apache.log4j.Daily_RollingFileAppender
6 #DEBUG以上才使用
7 log4j.appender.Daily_Rolling.Threshold=DEBUG
8 #滚动文件名
9 log4j.appender.Daily_Rolling.File=C:\\daily_rolling.log
10 #追加方式
11 log4j.appender.Daily_Rolling.Append=true
12 #滚动日期格式
13 log4j.appender.Daily_Rolling.DatePattern=.yyyy-MM-dd
14 # 输出日期格式
15 log4j.appender.Daily_Rolling.layout=org.apache.log4j.PatternLayout
16 log4j.appender.Daily_Rolling.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

  日志文件名称为daily_rolling.log,日期格式为 yyyy-MM-dd。进入新的一天后,文件会被自动更名,格式为daily_rolling.log.2013-06-06。

  输出到JDBC数据库

  数据库输出(JDBCAppender),通过JDBC链接把日志输出到数据库中,配置时需要配置JDBC驱动,连接字符串,用户名,密码以及SQL语句。注意JDBCAppender需要相应的数据库驱动。先创建数据库,并建立数据库日志表。本例使用MySQL数据库,脚本如下:

1 create database log4j;
2 use log4j;
3 create table tb_log(id int primary key auto_increment,
4 date varchar(255),
5 priority varchar(255),
6 message text,
7 classname varchar(255));

配置JDBCAppender的代码如下:log4j.properties

 1 #配置rootLogger为ALL级别,输出地位DATABASE
2 log4j.rootLogger= ALL, DATABASE
3 #数据库输出
4 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
5 log4j.appender.DATABASE.Threshold=DEBUG
6 #数据库连接URL
7 log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4j
8 #数据库驱动
9 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
10 #用户名
11 log4j.appender.DATABASE.user=root
12 #用户密码
13 log4j.appender.DATABASE.password=password
14 #执行SQL语句,列内容为表达式
15 log4j.appender.DATABASE.sql=insert into tb_log(date, priority, message, classname) values('%d', '%p', '%m', '%c')
16 #输出格式
17 log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
18 log4j.appender.DATABASE.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

配置的关键是SQL语句。Log4j能够取到各种环境数据,包括时间,级别,类名,文件名,方法名,所在行数等。具体详见后面的格式化器Layout。SQL八个参数对应到日志表的相关列中。运行代码如下:

 1 import org.apache.log4j.Logger;
2
3 public class Log4jJDBCTest {
4 public static Logger log = Logger.getLogger(Log4jJDBCTest.class);
5
6 public static void main(String[] args) {
7 log.trace("trace信息");
8 log.debug("debug信息");
9 log.info("info信息");
10 log.warn("warn信息");
11 log.error("errof信息");
12 log.fatal("fatal信息");
13 try {
14 String s = null;
15 s.length();
16 } catch (Exception e) {
17 log.trace("trace一个异常", e);
18 log.debug("debug一个异常", e);
19 log.info("info一个异常", e);
20 log.warn("warn一个异常", e);
21 log.error("error一个异常", e);
22 log.fatal("fatal一个异常", e);
23 }
24 }
25
26 }

运行效果如下:

注意:JDBC输出可能会因为短时间内大量的连接数据库而导致连接失败,因此要谨慎使用JDBC输出

from: http://www.cnblogs.com/ArtsCrafts/archive/2013/06/07/log4j5.html

Log4j详细介绍(五)----输出地Appender的更多相关文章

  1. java日志框架log4j详细配置及与slf4j联合使用教程

    最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...

  2. [转载]java日志框架log4j详细配置及与slf4j联合使用教程

    一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...

  3. java日志框架log4j详细配置及与slf4j使用教程

    一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...

  4. (转)log4j使用介绍

    原文出自: log4j使用介绍 日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录.以下是个人经验,具体请参考Log4j文档指南. Log4j ...

  5. doT.js详细介绍

    doT.js详细介绍   doT.js特点是快,小,无依赖其他插件. 官网:http://olado.github.iodoT.js详细使用介绍 使用方法:{{= }} for interpolati ...

  6. web.xml 详细介绍(转)

    web.xml 详细介绍 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧 ...

  7. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  8. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. 【转】图解CSS的padding,margin,border属性(详细介绍及举例说明)

    W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).边框距(p ...

随机推荐

  1. C++ code:判断字符串相等

    如果两个字符串中0和1的个数分别相等,则称该对字符串为相等. 方法一: 由于string类对于读取文件中子串以及比较都很方便,所以,用string类的对象来逐对存放字串,然后将字串分别排序后对其进行比 ...

  2. LeetCode(2):Add Two Numbers 两数相加

    Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ...

  3. 合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)

    尽量使用对象组合,而不是继承来达到复用的目的 未完待续

  4. 空指针null

    Java中,null是一个关键字,用来标识一个不确定的对象.因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量 Java默认给变量赋值:在定义变量的时候,如果定义后没有给变量赋值, ...

  5. ERROR 2003:Can't connect to MySQL server on 'localhost'

    mysql出现10061错误解决办法 如果出现"ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)", ...

  6. BZOJ2333 [SCOI2011]棘手的操作 堆 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2333 题意概括 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i ...

  7. 2018年商业版idea破解安装介绍

    1. IntelliJ IDEA 2018商业版-安装 首先去官网http://www.jetbrains.com/idea/download/#section=windows下载Ultimate版( ...

  8. 023 SpringMVC拦截器

    一:拦截器的HelloWorld 1.首先自定义拦截器 只要实现接口就行. package com.spring.it.interceptors; import javax.servlet.http. ...

  9. (转)40个Java集合面试问题和答案

    Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 另外,码农网之前也整理过一篇关于Java集合面试题的文章:大公司最 ...

  10. 宇宙最强VisualStudio2017配置pyQt5用于python3.6的UI界面工具(转)

    宇宙最强VisualStudio2017配置pyQt5用于python3.6的UI界面工具 转载: https://blog.csdn.net/m0_37606112/article/details/ ...