Java 日志工具Log4j的简单配置和使用

Java 日志工具Log4j的简单使用

1. 简介

Log4j是Java的一个日志工具,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

2. 使用

这里通过Maven引入Log4j的依赖包

2.1 Idea新建Maven工程, 配置Maven依赖项

使用Idea工具新建一个Maven工程,建好的工程目录如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNzDzB0c-1584256042975)(13BD6F0E-E99D-4258-95CD-C98B2F63191E.png)]

其中,pom.xml是Maven的工程配置文件,我们需要编写此文件来向工程添加外部依赖包。(如果Idea提示是否导入工程,这里选择Auto import)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLJOBoOY-1584256042976)(F694F6DD-7E3C-49FE-B305-2FD36EE879F6.png)]

<dependencies>
        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

Log4j的最新版Maven依赖配置项可以在mvnrepository.com搜索得到。

2.2 示例

2.2.1 配置示例

Log4j使用src/main/resources/log4j.properties作为配置文件。内容如下:

###Log4j设置###
log4j.rootLogger=debug,stdout,D
### 输出信息到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}  [ %t ]  %m%n
### 输出DEBUG 级别以上的日志到日志文件 ###
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=./log/debug.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

2.2.2 使用示例

LogUtils类

import org.apache.log4j.Logger;

/**
 * LogUtils
 * 日志输出类
 * @author ScorpioDong
 * @version 1.0
 * @date 2020/3/14 9:48 PM
 */
public class LogUtils {
    private static final Logger debugLogger = Logger.getLogger("DEBUG");
    private static final Logger infoLogger = Logger.getLogger("INFO");
    private static final Logger warnLogger = Logger.getLogger("WARN");
    private static final Logger errorLogger = Logger.getLogger("ERROR");

    /**
     * 输出debug级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logDebug(Object msg) {
        debugLogger.debug(msg);
    }

    /**
     * 输出info级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logInfo(Object msg) {
        debugLogger.info(msg);
    }

    /**
     * 输出warn级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logWarn(Object msg) {
        debugLogger.warn(msg);
    }

    /**
     * 输出error级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logError(Object msg) {
        debugLogger.error(msg);
    }
}

测试

public static void main(String[] args) {
        LogUtils.logDebug("Hello1");
        LogUtils.logInfo("Hello2");
        LogUtils.logWarn("Hello3");
        LogUtils.logError("Hello4");
    }

执行结果:

[DEBUG] 2020-03-15 15:00:48,441  [ main ]  Hello1
[INFO ] 2020-03-15 15:00:48,443  [ main ]  Hello2
[WARN ] 2020-03-15 15:00:48,443  [ main ]  Hello3
[ERROR] 2020-03-15 15:00:48,443  [ main ]  Hello4

日志文件信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOazD051-1584256042977)(854337AD-1DFA-4D01-BB1F-8B21DFD3DF83.png)]

3 Log4j配置介绍

Log4j有三个主要的组件:Loggers(日志记录器),Appenders (日志的输出源)和Layouts(日志的布局)。

3.1 Loggers

Loggers可以理解为日志的级别,Log4j分为5个级别,从轻到重依次为:DEBUG、INFO、WARN、ERROR和FATAL。
Log4j可以在代码中调用相应级别的日志输出方法实现日志的记录。特别的规则:Log4j可以配置全局日志等级,最终输出的日志登记不低于全局日志等级。简单来说,全局日志等级为DEBUG则,五种日志全部记录,全局日志等级为WARN则会忽略DEBUG和INFO等级日志。

3.2 Appenders

Appenders可以理解为日志将要输出的地方的配置。Log4j允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
常用配置项如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个新的日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3.3 Layouts

Layouts可以理解为日志以怎样的格式输出。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。
常用配置项如下:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

4 Log4j详细配置

4.1 rootLogger配置

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
  • level:设定全局日志等级,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。
  • appenderName: 日志信息要输出到哪里,名字可以随意取。可以同时指定多个输出目的地,用逗号隔开。

4.2 appender的详细配置

配置appender的输出方式
log4j.appender.appenderName = org.apache.log4j.ConsoleAppender

常用配置项如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个新的日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

不同输出方式的详细配置 (可选)

ConsoleAppender(控制台)
  • Threshold=WARN:指定该输出方式的最低输出级别,默认DEBUG。
  • ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  • Target=System.err: 指定输出流,默认System.out。
FileAppender(文件)
  • Threshold=WARN:同上。
  • ImmediateFlush=true:同上。
  • Append=false:设置文件是覆盖写还是添加写,false为覆盖,true是添加。默认为true。
  • File=./log/logging.log4j:指定消息输出到工程log文件夹的logging.log4j文件中。
DailyRollingFileAppender(固定时间间隔产生一个日志文件)
  • Threshold=WARN:同上。
  • ImmediateFlush=true:同上。
  • Append=false:同上。
  • File:同上。
  • DatePattern=’.'yyyy-MM:指定多久产生新的配置文件。就文件命名为"指定文件名.yyyy-MM".
    • '.'yyyy-MM:每月
    • '.'yyyy-ww:每周
    • '.'yyyy-MM-dd:每天
    • '.'yyyy-MM-dd-a:每天两次
    • '.'yyyy-MM-dd-HH:每小时
    • '.'yyyy-MM-dd-HH-mm:每分钟
RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • Threshold=WARN:同上。
  • ImmediateFlush=true:同上。
  • Append=false:同上。
  • File:同上。
  • MaxFileSize=100KB:后缀可以是KB, MB或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到"指定文件名.1"文件中。
  • MaxBackupIndex=2:指定可以产生的滚动文件的最大数,2表示可以保存"指定文件名.1"、"指定文件名.2"和"指定文件名"三个文件,存满会覆盖.1文件

不同输出方式的Layout输出格式配置 (可选)

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

常用配置项如下:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
HTMLLayout
  • LocationInfo=true:输出java文件名称和行号,默认值是false。
  • Title=My Logging: 默认值是Log4J Log Messages。
PatternLayout选项
  • ConversionPattern=%m%n:设定以怎样的格式显示消息。

格式化符号:

  • %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
  • %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
  • %r:输出自应用程序启动到输出该log信息耗费的毫秒数。
  • %t:输出产生该日志事件的线程名。
  • %l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
  • %c:输出日志信息所属的类目,通常就是所在类的全名。
  • %M:输出产生日志信息的方法名。
  • %F:输出日志消息产生时所在的文件名称。
  • %L::输出代码中的行号。
  • %m::输出代码中指定的具体日志信息。
  • %n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。
  • %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
  • %%:输出一个"%"字符。

格式化修饰符

  • c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
  • %-20c:"-"号表示左对齐。
  • %.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

本文参考自 https://blog.csdn.net/qq_28082757/article/details/89554144

发布了46 篇原创文章 · 获赞 37 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_37771142/article/details/104879103