zoukankan      html  css  js  c++  java
  • Log4j详细介绍(五)----输出地Appender

    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

  • 相关阅读:
    Java基本数据类型学习
    【异常】Docker安装elasticsearch7, 浏览使用 9200 无法打开
    docker logs-查看docker容器日志
    centos开开放防火墙
    软工超越日报-android的简单旋转效果实现 5/13
    软工超越日报-Android文件下载器 5/12
    软工超越日报-团队第一阶段冲刺十日谈回顾总结 5/11
    软工超越日报-安卓APP联网获取数据(3) 5/10
    软工超越日报-安卓APP联网获取数据(2) 5/9
    软工超越日报-安卓APP联网下载数据(1) 5/8
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/7045731.html
Copyright © 2011-2022 走看看