原创

项目中Log4j日志配置与多输出源(Appender)控制

项目中Log4j日志的配置与多输出源(Appender)控制

1. Maven 依赖

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

2. 资源文件配置

/src/main/resources/ 目录下新建 log4j 的配置文件:log4j.properties

###### Logger init ######
log4j.rootLogger=ALL,FA

###### File Appender (FA) ######
log4j.appender.FA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FA.File=/logs/me_too.log
#log4j.appender.FA.MaxFileSize=10240KB
#log4j.appender.FA.MaxBackupIndex=20
log4j.appender.FA.Append=true
log4j.appender.FA.layout = org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n

###### Console Appender Dev (CAD) ######
log4j.logger.ConsoleDev=DEBUG, CAD
log4j.appender.CAD = org.apache.log4j.ConsoleAppender
log4j.appender.CAD.layout = org.apache.log4j.PatternLayout
log4j.appender.CAD.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n

###### Console Appender Prod (CAP) ######
log4j.logger.ConsoleProd=INFO, CAP
log4j.appender.CAP = org.apache.log4j.ConsoleAppender
log4j.appender.CAP.layout = org.apache.log4j.PatternLayout
log4j.appender.CAP.layout.ConversionPattern = %m%n

###### INPUT Appender (IA) ######
log4j.logger.INPUT=INFO, IA
log4j.appender.IA=org.apache.log4j.ConsoleAppender
log4j.appender.IA.layout = org.apache.log4j.PatternLayout
log4j.appender.IA.layout.ConversionPattern = %m

###### INPUT Appender (IA) ######

# Exclude swiss re logging for debug
#log4j.logger.com.swissRe=error

2.1 Appender 输出源

2.1.1 Console Appender 控制台输出

Log4j 日志的输出都依赖于一个称为 “输出源”(Appender) 的东西。而输出源可以大概分为 输出到控制台输出到文件 两大类。

每一个输出源都需要配置三个参数:输出装置(Appender)、布局、输出格式:

log4j.appender.CAD = org.apache.log4j.ConsoleAppender
log4j.appender.CAD.layout = org.apache.log4j.PatternLayout
log4j.appender.CAD.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n

其中输出装置可以进行自定义,只需要继承 org.apache.log4j.AppenderSkeleton 并重写 append()requiresLayout() 方法即可。 日志的输出格式参考 这篇文章

除了上面三个基本配置外,每一个输出源还需要配置它的名称和日志级别:

log4j.logger.ConsoleDev=DEBUG, CAD

这个配置的含义是,定义一个 logger 名称为 ConsoleDev ,它的日志级别为 DEBUG,它的配置简称为 CAD。

在程序中我们这样去调用该日志输出源:

private static final Logger logger = Logger.getLogger("ConsoleDev");

这样在程序中就会调用到配置文件中配置的名叫 ConsoleDev 输出源进行日志输出。

2.1.2 File Appender 文件输出

同样每个文件输出源都需要有三个配置:

log4j.appender.FA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FA.layout = org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n

除此之外,还可以进行以下配置:

log4j.appender.FA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FA.File=/logs/me_too.log
log4j.appender.FA.MaxFileSize=10240KB
log4j.appender.FA.MaxBackupIndex=20
log4j.appender.FA.Append=true
log4j.appender.FA.layout = org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n

其中,log4j 提供了多个 File Appender:

  • RollingFileAppender:这种Appender会滚动日志文件。当日志文件达到指定的大小(例如10MB)时,它会创建一个新的日志文件,并开始将日志写入新的文件。这种方式可以防止单个日志文件过大,并方便进行日志管理。
  • DailyRollingFileAppender:这种Appender与RollingFileAppender类似,但它会在每天的特定时间(例如每天午夜)创建新的日志文件。这种方式可以方便地按日期进行日志管理。
  • SizeBasedTriggeringPolicy:这种策略会在日志文件达到指定的大小时触发滚动。你可以设置日志文件的最大大小和最小大小。
  • TimeBasedTriggeringPolicy:这种策略会在特定的时间间隔(例如每天)触发滚动。你可以设置日志文件的滚动间隔。
  • FixedWindowRollingPolicy:这种策略会在达到特定的滚动数量时触发滚动。你可以设置日志文件的最大数量。
  • LogSizeBasedTriggeringPolicy:这种策略会在日志文件达到特定的大小时触发滚动。你可以设置日志文件的最大大小。

2.2 配置默认日志记录器(Logger)

使用以下代码配置默认输出源:

log4j.rootLogger=ALL,FA

其中等号右边第一个参数表示默认 Logger 的日志级别, All 表示记录所有级别的日志(Log4j 日志级别见文末) ;第二个参数表示将哪些日志输出源作为默认 Logger。

需要注意的是,默认 Logger 中可以同时配置多个 File Appender ,这些配置可以实现将日志输出到不同环境或设备的文件中去。 同时默认 Logger 中的控制台输出源也能配置多个 Console Appender,只不过需要注意的是,如果在默认 Logger 处配置了某个/某些 Console Appender ,并且配置文件中有不止一个 Console Appender,那么程序运行时控制台会同时输出多个Console Appender的内容,即使你指定了在程序中使用哪个 Logger,因此一般建议 rootLogger 不配置 Console Appender,除非配置文件中只有一个控制台输出源。

另外需要注意的是,rootLogger配置的输出源名称为其简称,如:log4j.rootLogger=ALL,FA,CAD

3. Log4j 日志级别

  • FATAL:表示非常严重的错误事件,这可能会导致应用程序无法继续运行。
  • ERROR:表示虽然不是致命错误,但仍然可能导致功能问题。
  • WARN:表示虽然不是错误,但可能会导致问题。
  • INFO:提供应用程序运行时的信息性消息。
  • DEBUG:提供详细的信息,这些信息对于诊断问题非常有用。
  • TRACE:提供最详细的信息,这些信息对于诊断问题非常有用。

当设置了日志级别为INFO时,这意味着只有 INFO、WARN、ERROR 和 FATAL 级别的日志消息会被记录。

Java
  • 作者:CoCo(联系作者)
  • 发表时间:2024-03-28 18:57:58
  • 更新时间:2024-03-28 18:57:58
  • 版权声明 © 原创不易,转载请注明出处
  • 留言