log4j日志框架

log4j日志框架

日志级别

  1. OFF
  2. FATAL
  3. ERROR
  4. WARN
  5. INFO
  6. DEBUG
  7. TRACE
  8. ALL

级别是分大小的,DEBUG < INFO < WARN < ERROR,分别用来指定这条日志信息的重要程度,Log4j输出日志的规则是:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

Appenders

日志输出位置

记录日志以及定义日志的级别仅仅是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。

常用 Appenders

  • ConsoleAppender

    将日志输出到控制台

  • FileAppender

    将日志输出到文件中

  • DailyRollingFileAppender

    将日志输出到一个日志文件,并且每天输出到一个新的文件

  • RollingFileAppender

    将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件

  • JDBCAppender

    把日志信息保存到数据库中

Layouts

日志输出布局

有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。

常用Layouts

  • PatternLayout

    最强大的格式化组件,可以根据自定义格式输出日志,如果没有指定转换格式, 就是用默认的转换格式

  • HTMLLayout

    格式化日志输出为HTML表格形式

  • SimpleLayout

    简单的日志输出格式化,打印的日志格式如默认INFO级别的消息

PatternLayout格式说明

使用PatternLayout可以自定义格式输出,是我们最常用的方式,可以在属性配置文件中指定log4j.appender.console.layout.ConversionPattern来指定输出格式

这种格式化输出采用类似于 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:

占位符

占位符含义
%m输出代码中指定的日志信息
%p输出优先级,及 DEBUG、INFO 等
%n换行符(Windows平台的换行符为 “\n”,Unix 平台为 “\n”)
%r输出自应用启动到输出该 log 信息耗费的毫秒数
%c输出打印语句所属的类的全名
%t输出产生该日志的线程全名
%d输出服务器当前时间,默认为 ISO8601,也可以指定格式,如:%d{yyyy年MM月dd日 HH:mm:ss}
%l输出日志时间发生的位置,包括类名、线程、及在代码中的行数。如:Test.main(Test.java:10)
%F输出日志消息产生时所在的文件名称
%L输出代码中的行号
%%输出一个 “%” 字符

对齐

可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式

%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐

%-5c 输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格

%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不

会有空格

%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉

Maven依赖

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

配置文件

在 classpath目录下(即idea中的resources)创建 log4j.properties属性配置文件

  • log4j.rootLogger为根节点,必须配置

    • 属性值第一个表示日志输出级别,如debug
    • 属性其他值表示日志输出的配置,如console,file,这是自定义名称,是下面具体配置的输出位置的 {AppendName}
  • log4j.appender.console 具体输出位置的配置,格式为 log4j.appender.{AppendName}

    • {AppendName}为自定义名称,要见名知意
### 设置 ###
log4j.rootLogger=debug,console,file


# 输出信息到控制抬
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


# 输出到文件 F://logs/log.log
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=F://logs/log.log
log4j.appender.file.Append=true
log4j.appender.file.Encoding=UTF8
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

# 输出到文件 F://logs/log.html
log4j.appender.html=org.apache.log4j.FileAppender
log4j.appender.html.File=F://logs/log.html
log4j.appender.html.Append=true
log4j.appender.html.Encoding=UTF8
log4j.appender.html.Threshold=DEBUG
log4j.appender.html.layout=org.apache.log4j.HTMLLayout


# 文件分块,文件最大为 1MB,最多有5个文件,循环覆盖旧文件
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern=[%-10p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
log4j.appender.rollingFile.file=F://logs/log.log
log4j.appender.rollingFile.encoding=UTF-8
#指定日志文件内容大小
log4j.appender.rollingFile.maxFileSize=1MB
#指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex=5


# 文件按时间来,设置datePattern,按照时间精度来分文件,'.'yyyy-MM-dd 级按照天来分
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.conversionPattern=[%-10p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
log4j.appender.dailyRollingFile.file=F://logs/log.log
log4j.appender.dailyRollingFile.encoding=UTF-8
log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd
#log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd HH-mm-ss


# 输出到数据库表
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
log4j.appender.logDB.Driver=com.mysql.jdbc.Driver
log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/test
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=admin
log4j.appender.logDB.Sql=INSERT INTO tbl_log(name,createTime,level,category,fileName,message) values('project_log','%d{yyyy-MM-dd HH:mm:ss}','%p','%c','%F','%m')

使用

  1. 配置属性配置文件,参照 上面的配置文件

  2. Java程序

import org.apache.log4j.Logger;
import org.junit.Test;

public class App {

    //获取logger对象,指定当前类
    private static Logger logger = Logger.getLogger(App.class);

    //指定log信息
    @Test
    public void test01() {
        logger.trace("trace message");
        logger.debug("debug message");
        logger.info("info message");
        logger.warn("warn message");
        logger.error("error message");
        logger.fatal("fatal message");
    }
/*
[DEBUG] 2021-06-29 19:10:38,926 method:cn.qkmango.App.test01(App.java:16)
debug message
[INFO ] 2021-06-29 19:10:38,929 method:cn.qkmango.App.test01(App.java:17)
info message
[WARN ] 2021-06-29 19:10:38,929 method:cn.qkmango.App.test01(App.java:18)
warn message
[ERROR] 2021-06-29 19:10:38,929 method:cn.qkmango.App.test01(App.java:19)
error message
[FATAL] 2021-06-29 19:10:38,929 method:cn.qkmango.App.test01(App.java:20)
fatal message
*/

    //指定log信息,并打印异常对象
    @Test
    public void test02() {

        Exception e = new Exception("异常");
        // logger.trace("trace message",e);
        logger.debug("debug message",e);
        // logger.info("info message",e);
        // logger.warn("warn message",e);
        // logger.error("error message",e);
        // logger.fatal("fatal message",e);
    }
/*
    [DEBUG] 2021-06-29 19:13:40,486 method:cn.qkmango.App.test02(App.java:29)
    debug message
    java.lang.Exception: 异常
        at cn.qkmango.App.test02(App.java:27)
        ......
*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值