Log4j 配置详解以及使用案例

1 基本使用

  • 新建 Maven 项目,引入 Log4j依赖
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  • 创建 log4j.properties 文件
log4j.rootLogger=DEBUG,Console,File

# Console - 将日志打印到控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

# File - 将日志打印至指定的文件中
log4j.appender.File=org.apache.log4j.FileAppender
log4j.appender.File.File=D:\\tmp\\log\\appender-log.log
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
  • 打印日志
package com.sunk.log4jtest;

import org.apache.log4j.Logger;

/**
 * @author sunk
 * @since 2023/1/5
 **/
public class LogTest01 {

    public static void main(String[] args) {
        final Logger logger = Logger.getLogger(LogTest01.class);
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        logger.fatal("fatal");
    }
}

2 配置文件

2.1 根配置

把指定级别及以上的日志信息输出到指定的一个或者多个位置,Log4j 官方推荐使用如下四个等级:ERROR、WARN、INFO、DEBUG

log4j.rootLogger = [ level ], Console, FileAppender, …

2.2 日志样式

具体打印配置中的 log4j.appender.xxx.layout 项,即是配置打印格式

  • 支持的打印格式

org.apache.log4j.HTMLLayout,以HTML表格形式布局

org.apache.log4j.PatternLayout,可以灵活地指定布局模式

org.apache.log4j.SimpleLayout,仅包含日志信息的级别和信息字符串

org.apache.log4j.TTCCLayout,包含日志产生的时间、线程、类别等等信息

  • HTMLLayout
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.HTMLLayout
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Log4J Log Messages</title>
<style type="text/css">
<!--
body, table {font-family: arial,sans-serif; font-size: x-small;}
th {background: #336699; color: #FFFFFF; text-align: left;}
-->
</style>
</head>
<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
<hr size="1" noshade>
Log session start time Thu Jan 05 14:02:24 CST 2023<br>
<br>
<table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466" width="100%">
<tr>
<th>Time</th>
<th>Thread</th>
<th>Level</th>
<th>Category</th>
<th>Message</th>
</tr>

<tr>
<td>0</td>
<td title="main thread">main</td>
<td title="Level">INFO</td>
<td title="com.sunk.log4jtest.LogTest01 category">com.sunk.log4jtest.LogTest01</td>
<td title="Message">info</td>
</tr>

<tr>
<td>2</td>
<td title="main thread">main</td>
<td title="Level"><font color="#993300"><strong>WARN</strong></font></td>
<td title="com.sunk.log4jtest.LogTest01 category">com.sunk.log4jtest.LogTest01</td>
<td title="Message">warn</td>
</tr>

<tr>
<td>2</td>
<td title="main thread">main</td>
<td title="Level"><font color="#993300"><strong>ERROR</strong></font></td>
<td title="com.sunk.log4jtest.LogTest01 category">com.sunk.log4jtest.LogTest01</td>
<td title="Message">error</td>
</tr>

<tr>
<td>2</td>
<td title="main thread">main</td>
<td title="Level"><font color="#993300"><strong>FATAL</strong></font></td>
<td title="com.sunk.log4jtest.LogTest01 category">com.sunk.log4jtest.LogTest01</td>
<td title="Message">fatal</td>
</tr>

  • PatternLayout
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
2023-01-05 14:04:19,312 [main] INFO  [com.sunk.log4jtest.LogTest01] - info
2023-01-05 14:04:19,312 [main] WARN  [com.sunk.log4jtest.LogTest01] - warn
2023-01-05 14:04:19,312 [main] ERROR [com.sunk.log4jtest.LogTest01] - error
2023-01-05 14:04:19,312 [main] FATAL [com.sunk.log4jtest.LogTest01] - fatal

log4j.appender.Console.layout.ConversionPattern 即是指定自定义样式,常用的配置如下:

代码含义
%m输出代码中指定的消息
%M输出打印该条日志的方法名
%p输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL
%r输出自应用启动到输出该log信息耗费的毫秒数
%c输出所属的类目,通常就是所在类的全名
%t输出产生该日志事件的线程名
%n输出一个回车换行符,Windows平台为 “\r\n”,Unix平台为 “\n”
%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921
%l输出日志事件的发生位置,及在代码中的行数
%-5p表示输出 %p 信息时至少占 5 个字符,内容不足以空格占位
  • SimpleLayout
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.SimpleLayout
INFO - info
WARN - warn
ERROR - error
FATAL - fatal
  • TTCCLayout
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.TTCCLayout
[main] INFO com.sunk.log4jtest.LogTest01 - info
[main] WARN com.sunk.log4jtest.LogTest01 - warn
[main] ERROR com.sunk.log4jtest.LogTest01 - error
[main] FATAL com.sunk.log4jtest.LogTest01 - fatal

2.3 输出等级

在配置文件的一开始指定了 log4j.rootLogger 用来指定全局的输出等级,也可以针对每一个具体的输出来配置日志的输出等级,这时候可以使用 log4j.appender.xxx.Threshold 来指定

  • 测试案例

rootLogger 配置的是 DEBUG 级别,但是在具体的 Console 配置中使用 Threshold 限制输出到此目标的等级限制为 ERROR 及以上,当存在多个输出目标时,可以通过此参数实现将 INFO、ERROR 日志分离的效果

log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.appender.Console.Threshold=ERROR
2023-01-05 14:24:11,135 [main] ERROR [com.sunk.log4jtest.LogTest01] - error
2023-01-05 14:24:11,135 [main] FATAL [com.sunk.log4jtest.LogTest01] - fatal

3 使用案例

3.1 打印到控制台

#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

3.2 打印到文件

  • 一直追加到一个文件
log4j.appender.File=org.apache.log4j.FileAppender
log4j.appender.File.File=D:\\tmp\\log\\appender-log.log
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
  • 按天滚动文件
#DailyRollingFile
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRollingFile.File = D:\\tmp\\log\\daily-rolling-log.log
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
  • 按大小滚动文件
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = D:\\tmp\\log\\rolling-log.log
log4j.appender.RollingFile.MaxFileSize=10MB
log4j.appender.RollingFile.MaxBackupIndex=3
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

3.3 分级别打印

将日志按照 INFO,WARN,ERROR 级别分类,分别打印到对应的文件中

log4j.rootLogger=DEBUG, INFOFILE, WARNFILE, ERRORFILE
# INFOFILE
log4j.appender.INFOFILE=org.apache.log4j.FileAppender
log4j.appender.INFOFILE.File=D:\\tmp\\log\\info.log
log4j.appender.INFOFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOFILE.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.appender.INFOFILE.Threshold=INFO
# WARNFILE
log4j.appender.WARNFILE=org.apache.log4j.FileAppender
log4j.appender.WARNFILE.File=D:\\tmp\\log\\warn.log
log4j.appender.WARNFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.WARNFILE.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.appender.WARNFILE.Threshold=WARN
# ERRORFILE
log4j.appender.ERRORFILE=org.apache.log4j.FileAppender
log4j.appender.ERRORFILE.File=D:\\tmp\\log\\error.log
log4j.appender.ERRORFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ERRORFILE.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.appender.ERRORFILE.Threshold=ERROR
sunk@MATEBOOK:log$ ll
total 0
-rwxrwxrwx 1 sunk sunk 154 Jan  5 14:31 error.log
-rwxrwxrwx 1 sunk sunk 306 Jan  5 14:31 info.log
-rwxrwxrwx 1 sunk sunk 230 Jan  5 14:31 warn.log

sunk@MATEBOOK:log$ cat error.log
2023-01-05 14:31:23,248 [main] ERROR [com.sunk.log4jtest.LogTest01] - error
2023-01-05 14:31:23,248 [main] FATAL [com.sunk.log4jtest.LogTest01] - fatal
sunk@MATEBOOK:log$ cat warn.log
2023-01-05 14:31:23,248 [main] WARN  [com.sunk.log4jtest.LogTest01] - warn
2023-01-05 14:31:23,248 [main] ERROR [com.sunk.log4jtest.LogTest01] - error
2023-01-05 14:31:23,248 [main] FATAL [com.sunk.log4jtest.LogTest01] - fatal
sunk@MATEBOOK:log$ cat info.log
2023-01-05 14:31:23,247 [main] INFO  [com.sunk.log4jtest.LogTest01] - info
2023-01-05 14:31:23,248 [main] WARN  [com.sunk.log4jtest.LogTest01] - warn
2023-01-05 14:31:23,248 [main] ERROR [com.sunk.log4jtest.LogTest01] - error
2023-01-05 14:31:23,248 [main] FATAL [com.sunk.log4jtest.LogTest01] - fatal
  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值