• log4j


    文档: https://www.yiibai.com/log4j/

    Log4j教程

    log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),它在Apache软件许可下发布。 

    Log4j是高度可配置的,并可通过在运行时的外部文件配置。它根据记录的优先级别,并提供机制,以指示记录信息到许多的目的地,诸如:数据库,文件,控制台,UNIX系统日志等。

    Log4j中有三个主要组成部分:

    • loggers: 负责捕获记录信息。

    • appenders : 负责发布日志信息,以不同的首选目的地。

    • layouts: 负责格式化不同风格的日志信息。

     Appenders:

    Apache的log4j提供Appender对象主要负责打印日志消息到不同的目的地,如控制台,文件,sockets,NT事件日志等等。

    每个Appender对象具有与之相关联的不同的属性,并且这些属性表明对象的行为

    属性描述
    layout Appender使用布局Layout 对象和与之相关的格式化的日志记录信息转换模式
    target 目标可以是一个控制台,一个文件,或根据附加器的另一个项目
    level 级别是必需的,以控制日志消息的过滤
    threshold Appender可以有与之独立的记录器级别相关联的级别阈值水平。Appender忽略具有级别低于阈级别的任何日志消息
    filter Filter 对象可以分析超出级别的匹配记录信息,并决定是否记录的请求应该由一个特定 Appender 或忽略处理

    Logger类提供了多种方法来处理日志活动。 Logger类不允许实例化一个新的记录器实例,但它提供了两个静态方法获得一个 Logger 对象:

    • public static Logger getRootLogger();

    • public static Logger getLogger(String name);

    Logging 方法:

    我们得到了一个名为记录器的实例之后,可以使用记录的几种方法来记录消息。 Logger类有专门用于打印日志信息下面的方法如下。

    SN方法及描述
    1 public void debug(Object message)
    这种方法打印使用 Level.DEBUG 消息级别
    2 public void error(Object message)
    这种方法打印使用 Level.ERROR 消息级别
    3 public void fatal(Object message);
    这种方法打印使用 Level.FATAL 消息级别
    4 public void info(Object message);
    这种方法打印使用 Level.INFO 消息级别
    5 public void warn(Object message);
    这种方法打印使用 Level.WARN 消息级别
    6 public void trace(Object message);
    这种方法打印使用Level.TRACE消息级别

    org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。

    Level描述
    ALL 各级包括自定义级别
    DEBUG 指定细粒度信息事件是最有用的应用程序调试
    ERROR 错误事件可能仍然允许应用程序继续运行
    FATAL 指定非常严重的错误事件,这可能导致应用程序中止
    INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
    OFF 这是最高等级,为了关闭日志记录
    TRACE 指定细粒度比DEBUG更低的信息事件
    WARN 指定具有潜在危害的情况

    日志级别是如何工作?

    级别p的级别使用q,在记录日志请求时,如果p>=q启用。这条规则是log4j的核心。它假设级别是有序的。对于标准级别它们关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

    布局类型:

    在层次结构中的顶级类是抽象类是org.apache.log4j.Layout。这是 log4j 的 API 中的所有其他布局类的基类。

    布局类定义为抽象在应用程序中,不要直接使用这个类; 相反,使用它的子类来工作,如下:

    布局方法:

    这个类提供了一个框架实现在所有其它布局对象的所有常见的操作,并声明了两个抽象方法。

    S.N.方法 & 描述
    1 public abstract boolean ignoresThrowable()
    这种方法表示日志信息是否处理传递给它的日志记录事件的一部分,任何 java.lang.Throwable 对象。如果布局对象处理 Throwable 对象,那么布局对象不忽视它,并返回false。
    2 public abstract String format(LoggingEvent event)
    独特的布局子类将实施这一方法的布局特定的格式

    除了这些抽象方法,布局类提供具体的实现下列方法:

    S.N.方法 & 描述
    1 public String getContentType()
    返回使用的布局的对象的内容类型。基类将返回 text/plain 作为默认的内容类型
    2 public String getFooter()
    指定日志消息的页脚信息
    3 public String getHeader()
    指定日志消息的标头信息

    如果想生成基于模式的特定格式的日志信息,那么可以使用 org.apache.log4j.PatternLayout 格式化日志信息。

    PatternLayout类扩展抽象 org.apache.log4j.Layout 类并覆盖format()方法根据提供的模式构建日志信息。 

    PatternLayout也是一个简单的布局对象,它提供下列Bean属性,可以通过配置文件进行设置:

    S.N.属性和说明
    1 conversionPattern
    设置转换模式。默认为 %r [%t] %p %c %x - %m%n

    模式转换字符:

    下表说明了以上模式使用的字符和所有其他字符,可以在自定义模式中使用:

    转换字符表示的意思
    c 用于输出的记录事件的类别。例如,对于类别名称"a.b.c" 模式  %c{2} 会输出 "b.c"
    C 用于输出呼叫者发出日志请求的完全限定类名。例如,对于类名 "org.apache.xyz.SomeClass", 模式 %C{1} 会输出 "SomeClass".
    d 用于输出的记录事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
    F 用于输出被发出日志记录请求,其中的文件名
    l 用于将产生的日志事件调用者输出位置信息
    L 用于输出从被发出日志记录请求的行号
    m 用于输出使用日志事件相关联的应用程序提供的消息
    M 用于输出发出日志请求所在的方法名称
    n 输出平台相关的行分隔符或文字
    p 用于输出的记录事件的优先级
    r 用于输出毫秒从布局的结构经过直到创建日志记录事件的数目
    t 用于输出生成的日志记录事件的线程的名称
    x 用于与产生该日志事件的线程相关联输出的NDC(嵌套诊断上下文)
    X 在X转换字符后面是键为的MDC。例如  X{clientIP} 将打印存储在MDC对键clientIP的信息
    % 文字百分号 %%将打印%标志

    格式修饰符:

    默认情况下,相关资料原样输出。然而,随着格式修饰符的帮助下,可以改变最小字段宽度,最大字段宽度和对齐。

    下表涵盖了各种各样的修饰符的情况:

    Format modifierleft justifyminimum widthmaximum width注释
    %20c false 20 none 用空格左垫,如果类别名称少于20个字符长
    %-20c true 20 none 用空格右垫,如果类别名称少于20个字符长
    %.30c NA none 30 从开始截断,如果类别名称超过30个字符长
    %20.30c false 20 30 用空格左侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
    %-20.30c true 20 30 用空格右侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。

    PatternLayout 示例:

    以下是针对 PatternLayout 一个简单的配置文件:

    # Define the root logger with appender file
    log = /usr/home/log4j
    log4j.rootLogger = DEBUG, FILE
    
    # Define the file appender
    log4j.appender.FILE=org.apache.log4j.FileAppender
    log4j.appender.FILE.File=${log}/log.out
    
    # Define the layout for file appender
    log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd}-%t-%x-%-5p-%-10c:%m%n

    要写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender。有以下FileAppender的配置参数:

    FileAppender配置:

    属性描述
    immediateFlush 标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作
    encoding 它可以使用任何字符编码。默认情况下是特定于平台的编码方案
    threshold 这个 appender 阈值级别
    Filename 日志文件的名称
    fileAppend 默认设置为true,这意味着记录的信息被附加到同一文件的末尾
    bufferedIO 此标志表示是否需要写入缓存启用。默认设置为false
    bufferSize 如果 bufferedI/O 启用,这表示缓冲区的大小,默认设置为8KB

    下面是一个示例配置文件 log4j.properties 的 FileAppender。

    # Define the root logger with appender file
    log4j.rootLogger = DEBUG, FILE
    
    # Define the file appender
    log4j.appender.FILE=org.apache.log4j.FileAppender
    # Set the name of the file
    log4j.appender.FILE.File=${log}/log.out
    
    # Set the immediate flush to true (default)
    log4j.appender.FILE.ImmediateFlush=true
    
    # Set the threshold to debug mode
    log4j.appender.FILE.Threshold=debug
    
    # Set the append to false, overwrite
    log4j.appender.FILE.Append=false
    
    # Define the layout for file appender
    log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.conversionPattern=%m%n

    log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库。

    JDBCAppender 配置:

    Property描述
    bufferSize 设置缓冲区的大小。默认大小为1
    driver 设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcOdbcDriver
    layout 设置要使用的布局。默认布局是org.apache.log4j.PatternLayout
    password Sets the database password.
    sql 指定SQL语句在每次记录事件发生的时间执行。这可能是INSERT,UPDATE或DELETE
    URL 设置JDBC URL
    user 设置数据库用户名

    日志表配置:

    开始使用基于JDBC日志,要创建在哪里保存日志信息的表。下面是创建日志表的SQL语句:

    CREATE TABLE LOGS
       (USER_ID VARCHAR(20) NOT NULL,
        DATED   DATE NOT NULL,
        LOGGER  VARCHAR(50) NOT NULL,
        LEVEL   VARCHAR(10) NOT NULL,
        MESSAGE VARCHAR(1000) NOT NULL
       );
    

    配置文件示例:

    以下是将用于将消息记录到一个日志表中的示例配置文件 log4j.properties的JDBCAppender

    # Define the root logger with appender file
    log4j.rootLogger = DEBUG, DB
    
    # Define the DB appender
    log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
    
    # Set JDBC URL
    log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME
    
    # Set Database Driver
    log4j.appender.DB.driver=com.mysql.jdbc.Driver
    
    # Set database user name and password
    log4j.appender.DB.user=user_name
    log4j.appender.DB.password=password
    
    # Set the SQL statement to be executed.
    log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')
    
    # Define the layout for file appender
    log4j.appender.DB.layout=org.apache.log4j.PatternLayout
    

    这里使用的是MySQL数据库,必须要使用实际DBNAME,用户ID和在其中创建的日志表的数据库密码。SQL语句是使用日志表名和输入值到表,需要执行INSERT语句。

    JDBCAppender不需要明确定义的布局。相反,使用PatternLayout 传递给它 SQL语句



  • 相关阅读:
    Django 登录页面重定向
    python 调试命令
    错误
    错误
    图算法之图的创建
    Git 常用命令详解(三)
    Git 常用命令详解(二)
    如何提问
    项目常用jquery/easyui函数小结
    我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用)
  • 原文地址:https://www.cnblogs.com/ooo0/p/8900682.html
Copyright © 2020-2023  润新知