初识Log4j:
     log4j有三个部分:
          1.loggers 负责捕获日志信息。
          2.appenders  负责输出信息到不同的目的地
          3.layouts 负责使用不同的样式输出日志
 
log4j框架中有两种对象:
     核心对象:框架的支撑对象,是框架必不可少的组成部分。
     支撑对象:这些都是框架可选的对象,用于提供额外重要的工作。
核心对象包括下面几种类型:
     logger对象,是最高的层,负责通过不同的风格转化日志信息,他提供给appender对象发布前的信息。(这里的层是指所处的位置)
     layout对象,用于提供格式化日志信息的风格,在发布日志信息前,使其变得可读,可重用。
     appender对象,这个对象属于底层的对象,它负责发布信息到不同的目的地,比如数据库,文件,控制台,UNIXsyslog等等。
log4j的架构组成图:
     
支撑对象,它们在log4j中扮演了很关键的角色:
     1.level对象:级别对象定义日志的粒度和优先级,有七种级别:OFF,DEBUG,INFO,ERROR,WARN,FATAL,ALL。
     2.过滤器对象:用于分析日志信息并决定日志信息是否输出。每个appender对象可以有几个过滤器对象协同工作,当日志信息到达特定的appender时,所有的过滤器会帮助appender在其发布到目的地之前进行过滤操作。
     3.对象渲染器:提供一段字符用于识别发送日志的不同对象,这个对象也用于layout对象准备常量信息。
     4.日志管理器:用于管理日志框架,它负责从初始化配置中读取信息,这个配置可能是文件配置,也可能是类的配置。
 
log4j.properties是log4j的配置文件,它采用键值对的方式定义。
默认情况下,logManager对象会在CLASSPATH目录下寻找log4j.properties.
基本的配置如下:
 
# Define the root logger with appender X

log4j.rootLogger = DEBUG, X
# Set the appender named X to be a File appender

log4j.appender.X=org.apache.log4j.FileAppender
# Define the layout for X appender

log4j.appender.X.layout=org.apache.log4j.PatternLayout

log4j.appender.X.layout.conversionPattern=%m%n
首先日志的级别为DEBUG,另外添加了一个appender,名字是X
设置appender的名字是X,并且定义该appender的实现为org.apache.log4j.FileAppender,即文件读写方式。
为X设置显示的方式--layout为PatternLayout
 
log4j提供了多种Appender对象,用输出日志消息到不同的目的地。比如控制台,文件,系统事件日志等等。每个appender对象都有不同的配置属性,这些属性来定义对象的行为。
layout, appender使用layout对象转换日志信息的格式。
target, 目标可能是控制台,文件,也可能是依赖于其他的appender。
level,用于设定过滤日志的级别。
threshhold  appender可以设置阈值,与日志的级别有关。日志会忽略掉所有低于该级别的日志。
filter  过滤器对象能够分析日志信息,然后决定日志请求由某个appender处理还是丢掉。
 
添加appender的格式如下:
     properties格式:log4j.logger.[logger-name]=level,appender1,...appendern
     xml格式:
<logger name="com.apress.logging.log4j" additivity="false">
    <appender-ref ref="appender1"/>
    <appender-ref ref="appender2"/>
</logger>
 

上面只展示来FileAppender的用法,log4j还有下面的appender以供使用:

  • AppenderSkeleton
  • AysncAppender
  • ConsoleAppender
  • DailyRollingFileAppender
  • ExternallyRolledFileAppender
  • FileAppender
  • JDBCAppender
  • JMSAppender
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • RollingFileAppender
  • SMTPAppender
  • SocketAppender
  • SocketHubAppender
  • SyslogAppender
  • TelnetAppender
  • WriterAppender
 
Layout:
    layout有:
  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout
 
 
第四部分:如何在java中输出日志消息
直接举一个例子:
pom.xml:
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
 
properties文件:
# Define log file location
log=E:/

# Define the root logger with appender X
log4j.rootLogger = DEBUG, FILE
# Set the appender named X to be a File appender
log4j.appender.FILE=org.apache.log4j.FileAppender

# Define the output file
log4j.appender.FILE.file=${log}/log.out

# Define the layout for X appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
 
DemoTest:
package com.fxb.log;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * @author  方小白  2017-09-04 17:00
 */
public class DemoTest1 {

    private  static Logger logger = Logger.getLogger(DemoTest1.class);

    public static void main(String[] args){

//        PropertyConfigurator.configure("classpath:/log4j.properties");

        logger.error("DemoTest1 -----error");
        logger.info("DemoTest1 -----info");
        logger.debug("DemoTest1 -----debug");
        logger.warn("Demotest1 -----warn");
        logger.trace("DemoTest1 ----trace");
        logger.fatal("DemoTest1 -----fatal");

    }

}
 
第五部分:日志输出的方法。
看第四部分中的代码。
日志类提供了很多方法处理日志活动,它不允许我们自己实例化一个logger,但是提供给我们两种静态方法,获得logger对象。
public static Logger getRootLogger();
public static Logger getLogger(String name);
d第一种方法返回应用实例的根Logger,它没有名字。
第二种方法通过名字获得日志对象Logger,类的名字是你传递的class的名字,通常是一个class的类名或者包名。
例如:static Logger logger = Logger.getLogger(XX.class.getName());
 
Logger类拥有下面几种打印日志的方法:
public void debug(Object message); 输出debug级别的错误。
public void error(Object message); 输出error级别的错误。
public void fatal(Object message); 输出fatal级别的错误。
public void info(Object message); 输出info级别的错误
public void warn(Object message); 输出warn级别的错误
public void trace(Object message); 输出trace级别的错误。
 
第六部分,日志的级别:
     ALL 所有日志的级别都包括。
     DEBUG  指定的信息事件的粒度是DEBUG,在调试应用的时候会有帮助。
     ERROR  指定错误事件,并且这些事件还会保证应用继续运行。
     FATAL  指定严重的错误事件,该事件会导致应用暂停。
     INFO  指定信息消息,强调应用粗粒度的运行情况。
     OFF  最高等级,相当于关闭了日志。
     TRACE  指定比DEBUG更粗粒度的调试日志。
     WARN  输出具有潜在风险的信息。
日志标准的排序是:
     ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF
 
第七部分:日志格式化
     log4j 提供了各种的layout对象,然后根据自己指定的Layout对象,转化日志信息。通常来说都是应用量身定制的layout对象转换信息格式。
     所有的layout对象从Appender对象中接收一个LoggingEvent对象,然后通过loggingEvent对象解析信息,在通过合适的ObjectRenderer获得相应的字符串。
     org.apache.log4j.Layout是log4jAPI中layout的抽象基类。log4j提供了其实现类DateLayout,HTMLLayout,PatternLayout,SimpleLayout,XMLLayout。
     Layout中的方法:
     这个类为所有的一般操作提提供了基本的框架,以及两个抽象方法。
public abstract boolean ingnoresThrowable(),它声明是否把java.lang.Throwable.object当做日志输出的一部分,如果layout处理这个异常对象,那么久不会忽略这个消息,反之就会忽略。
public abstract String format(LoggingEvent event)
个人自定义的layout装换格式:
除了,抽象方法,layout类也提供了一系列的接口:
public String getContentType(); 返回layout的类型,基类返回的是text/plain默认的文本类型。
public String getFooter(); 获取日志信息的尾部
public String getHeader();  获取日志信息的头部
 
第八部分,文件输出
在第四部分中,展示了文件输出,接下来详细的说一个文件输出。
使用org.apache.log4j.FileAppender可以把日志写入文件中。
FileAppender配置:
     immediateFlush 这个标志默认为true,是否每次有消息都自动flush文件中。
     encoding 字符编码
     threshold  appender的阈值threshold
     fileName 日志的名称
     fileAppend 默认设置为true,所有的日志都输出到相同的文件。
     bufferedIO  是否启动缓冲区,默认为false
     bufferedSize 如果启用了缓冲区,设置缓冲区的大小,默认是8k
 
多文件输出--日志轮转
     在第四部分的properites设置的基础上。添加:
     maxFileSize  设置日志大小的阈值,默认是10MB
     maxBackupIndex   设置的文件会被备份的数目,默认为1
多文件输出---日期轮转
     在第四部分properties设置的基础上添加:
     DatePattern,声明命名规则,默认是每天的半夜24点更新一次。
     其他格式:
          '.'yyyy-MM 每个月的开始时候更新一次。
          '.'yyyy-MM-dd 每天半夜24点的时候更新
          '.'yyyy-MM-dd-a 每天半夜24点的时候更新
          '.'yyyy-MM-dd-HH  每个小时更新一次
          '.'yyyy-MM-dd-HH-mm  每分钟更新一次
          '.'yyyy-ww 每周的第一天更新
 
第九部分:输出到数据库中:
     log4j提供了org.apache.log4j.JDBCAppender对象,可以把日志输出到特定的数据库中
     
常用的属性:
     bufferSize 设置buffer的大小,默认是1
     driver  设置数据库的驱动字符串,比如:com.mysql.jdbc.Driver
     layout  设置使用的layout,默认是org.apache.log4j.PatternLayout
     password 设置数据库的密码
     sql  设置每次日志产生的时候执行的sql语句,可以是insert,update,detele
     url   是指数据库的url
     user 设置数据库的用户名
 
示例:

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

log4j.appender.DB.driver=com.mysql.jdbc.Driver

log4j.appender.DB.user=user_name

log4j.appender.DB.password=password

log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

log4j.appender.DB.layout=org.apache.log4j.PatternLayout
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

log4j日志框架学习的更多相关文章

  1. Log4j日志框架学习零到壹(一)

    日志是系统开发过程中用于排查问题重要的记录.通常使用日志来记录系统运行的行为,什么时间点发生了什么 事情.Java中常用的莫过于Log4j框架了.下面主要围绕Log4j的基础知识.Log4j的使用方式 ...

  2. Log4j日志框架小记

    人啊,总是在学习中发现不足,不足中学习,学习中成长. 今天来系统记录一下对于常用日志组件的理解.配置.使用. 仅供参考, 错误之处请各路好汉不吝笔墨批评指正. 转载请注明出处 Log4j日志框架是Ap ...

  3. SpringBoot系列之切换log4j日志框架

    SpringBoot系列之使用切换log4j日志框架 ok,在pom文件右键->Diagrams->show Dependencies....,如图,找到spring-boot-start ...

  4. springboot日志框架学习------slf4j和log4j2

    springboot日志框架学习------slf4j和log4j2 日志框架的作用,日志框架就是用来记录系统的一些行为的,可以通过日志发现一些问题,在出现问题之后日志是好的一个帮手. 市面上的日志框 ...

  5. 一、log4j日志框架的理论和不同场景使用

    1.日志框架: 工作中要进行Java输出日志时,你需要一个或者多个日志框架.框架能提供对象.方法和必要的配置来发送日志信息.Java语言本身有自带的日志实现包java.util.logging.还有很 ...

  6. Slf4j+Log4j日志框架入门

    (一).日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的 ...

  7. Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架

    正如Spring官方文档所述,其底层的实现选择了commons-logging作为日志框架.这一"失足"性的选择,竟连Spring自身都抱怨.但是,谁叫Spring如此优秀呢,即使 ...

  8. 日志框架学习(log4j2+slf4j)

    现在比较吊的就是这个log4j2这个日志框架了,功能强悍.slf4j是个日志框架的统一接口,方便扩展,切换框架啥的. 配置SSM+log4J2+SL4J https://blog.csdn.net/c ...

  9. SpringBoot整合log4j日志框架

    Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. 加入修改依赖 <dependency> <groupId>org ...

随机推荐

  1. 如何更换git托管

    有时候会遇到需要更换代码托管平台,从github,gitlab或者Bitbucket迁移到其它平台,过程中可能遇到不少问题,本文从是否保留历史提交记录两种需求出发,介绍一下基于git托管平台的迁移方法 ...

  2. MSDTC启用——分布式事务

    一.前言 最近在做一个项目的时候使用了.NET中的System.Transactions(分布式事务),当项目开发完成以后,调用的时候遇到了MSDTC的问题,在查阅了相关资料后将这个问题解决了,大致的 ...

  3. (转)log4j(四)——如何控制不同风格的日志信息的输出?

    一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...

  4. (转)java 多线程 CountDownLatch用法

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...

  5. CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction)

    CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction) 开始 如图所示,本文围绕GLSL里的sam ...

  6. JPA Advanced Mappings(映射)

    JPA Advanced Mappings(映射) JPA是一个使用java规范发布的库.因此,它支持所有面向对象的实体持久性概念. 原文链接:http://blogxinxiucan.sh1.new ...

  7. android studio友盟分享

    这个东西搞了整整两天真是把我搞郁闷着了,官方demo下载后,根据提示的错误,修改了一个小bug之后,便能直接运行,但是不管我如何集成到自己app上,分享时APP都会黑屏Crash,并且代码都与官方de ...

  8. Vue2源码分析-逻辑梳理

    很久之前就看完vue1,但是太懒就一直没写博客,这次打算抽下懒筋先把自己看过了记录下来,否则等全部看完,估计又没下文了 看源码总需要抱着一个目的,否则就很难坚持下去,我并没做过vue的项目,我几乎很少 ...

  9. docker - 设置HTTP/HTTPS 代理

    背景 将docker的服务器环境切换到新的网络之后,由于服务器的internet是受限制的(需要连接配置远程代理,不能直接上网).因此,在使用docker连接docker hub 的时候,就会出错: ...

  10. 无法远程连接服务器上的mysql

    使用mysql管理工具连接服务器删过得mysql,显示连接被拒绝,但是在服务器上是可以登录mysql的. 无法远程连接通常以下几种情况: 首先,关闭mysql.        service mysq ...