导入log4j的jar包
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>
private Logger log = LogManager.getLogger(this.getClass());
public static void main(String[] args) {
log.info("infoinfoinfoinfo")
log.error("errorerrorerror")
}
val log = LogManager.getLogger(getClass)
def main(args: Array[String]): Unit = {
log.info("infoinfoinfoinfo")
log.error("errorerrorerror")
}
日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL;
日志文件内容的格式(layout.pattern),说明:%n-换行 、%m-日志内容 、%p-日志级别(FATAL,ERROR,WARN...) 、%F-java源文件名 、%t 输出产生该日志事件的线程名 、%d 输出日志时间点的日期或时间 、%L-java源码行数 、%C-java类名 、%M-java方法名 、%l-输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
log4j2需要放入resources目录中,需要命名成log4j2.properties
#公告配置,log文件存放路径
property.filename = ./log22
#控制台数据
appender.console.type = Console
appender.console.name = console
#输出布局类型
appender.console.layout.type = PatternLayout
#输入信息格式
appender.console.layout.pattern = %-d{yyyy-MM-dd HH:mm:ss,SSS} [%p] %c %m%n
#级别过滤
appender.console.filter.threshold.type = ThresholdFilter
#日志输出的级别
appender.console.filter.threshold.level = info
#===================自定义文件输入====================
appender.infoFile.type = RollingFile
appender.infoFile.name = infoLogFile
#输出文件保存地址
appender.infoFile.fileName=${filename}/info.log
#输入文件滚动时,文件重命名规则
appender.infoFile.filePattern = ${filename}/info-%d{MM-dd-yy-HH-mm-ss}-%i.log
appender.infoFile.layout.type = PatternLayout
#输入信息格式
appender.infoFile.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} [%t] - %msg%n
appender.infoFile.policies.type = Policies
#输入日志文件大小的触发策略
appender.infoFile.policies.size.type = SizeBasedTriggeringPolicy
#输入日志文件有100MB触发策略
appender.infoFile.policies.size.size=100MB
appender.infoFile.strategy.type = DefaultRolloverStrategy
appender.infoFile.strategy.max = 5
#INFO级别数据写入INFO.log文件中,下面设置的是有问题的,不知道是那问题,希望有大佬看到了帮我修改下,让小弟学习下
appender.infoFile.filter.threshold.type = infoLogFile
appender.infoFile.filter.threshold.level = INFO
appender.infoFile.filter.threshold.onMatch = ACCEPT
appender.infoFile.filter.threshold.onMisMatch=DENY
#第二个配置error的和上面配置info的一样就是名称要修改下
appender.errorFile.type = RollingFile
appender.errorFile.name = errorLogFile
appender.errorFile.fileName=${filename}/error.log
appender.errorFile.filePattern = ${filename}/error-%d{MM-dd-yy-HH-mm-ss}-%i.log
appender.errorFile.layout.type = PatternLayout
appender.errorFile.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} [%t] - %msg%n
appender.errorFile.policies.type = Policies
appender.errorFile.policies.size.type = SizeBasedTriggeringPolicy
appender.errorFile.policies.size.size=100MB
appender.errorFile.strategy.type = DefaultRolloverStrategy
appender.errorFile.strategy.max = 5
appender.errorFile.filter.threshold.type = errorLogFile
appender.errorFile.filter.threshold.level = INFO
appender.errorFile.filter.threshold.onMatch = ACCEPT
appender.errorFile.filter.threshold.onMisMatch=DENY
#根记录器
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = console
rootLogger.appenderRef.errorFile.ref = errorLogFile
rootLogger.appenderRef.errorFile.level = error
rootLogger.appenderRef.infoFile.ref = infoLogFile
rootLogger.appenderRef.infoFile.level = info
log4j2.properties的配置网上比较少有,有的也是差不多一样的,没有老的log4j资料多。
log4j2.xml的配置网上比较多配置说明也比较详细。
log4j2需要放入resources目录中,需要命名成log4j2.xml
<!-- status是log4j2自身内部的信息输出,可以不设置
monitorInterval是自动检测修改配置文件和重新配置本身,设置间隔秒数
-->
<configuration status="WARN" monitorInterval="3600">
<Properties>
<!-- 公共配置 -->
<!-- log文件存放路径./当前工程目录下 -->
<property name="basePath">./log2</property>
<!-- 输入信息格式 -->
<!-- 带行号显示,对日志输出的性能有影响,在控制台上点击可以直接定位到代码 -->
<property name="consoleLogPattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %l - %m%n</property>
<property name="logFilePattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M[%L line] - %m%n</property>
<!-- 日志默认切割的最小单位 -->
<property name="fileSize">100MB</property>
<!-- 日志默认输出级别 -->
<property name="outputLogLevel">DEBUG</property>
</Properties>
<!--定义appender -->
<appenders>
<!-- =======================================用来定义输出到控制台的配置======================================= -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 设置控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 设置输出格式,不设置默认为:%m%n -->
<PatternLayout pattern="${consoleLogPattern}"/>
</Console>
<!-- ============================打印INFO级别的日志到文件中======================= -->
<!-- fileName:日志保存路径,filePattern:日志压缩路径,将超过指定文件大小的日志,自动存入按"年月"建立的文件夹下面进行压缩 -->
<RollingFile name="InfoFile" fileName="${basePath}/info.log" filePattern="${basePath}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${logFilePattern}"/>
<Policies>
<!-- interval:设置为1,filePattern是%d{yyyy-MM-dd}到天的格式,则间隔一天生成一个文件,如果设置为12,filePattern是%d{yyyy-MM-dd-HH}到小时的格式,则间隔12小时生成一个文件
modulate:日志默认同类型日志,为true将以0点为边界进行调整
-->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${fileSize}"/>
</Policies>
<!-- 日志默认同一文件夹下可以存放的数量,不设置此属性则默认为7个 -->
<DefaultRolloverStrategy max="100" />
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<!-- ============================打印ERROR级别的日志到文件中=======配置和INFO的一样,就修改下保存文件名称和压缩文件名称==================== -->
<RollingFile name="ErrorFile" fileName="${basePath}/error.log" filePattern="${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="${logFilePattern}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${fileSize}"/>
</Policies>
<DefaultRolloverStrategy max="100" />
<Filters>
<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
</appenders>
<!--定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!-- 设置java.sql包下的日志只打印INFO及以上级别的日志,此设置可以支持sql语句的日志打印 -->
<logger name="java.sql" level="INFO" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!--建立一个默认的root的logger-->
<root level="${outputLogLevel}">
<appender-ref ref="Console"/>
<appender-ref ref="InfoFile"/>
<appender-ref ref="ErrorFile"/>
</root>
</loggers>
</configuration>
RollingFile可以配置多个,根据需要不同级别的日志存入不同文件中;
也可以去掉<Filters>把所有的日志写入到一个文件中去;
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
设置<Filters>控制是输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
每个级别的level配置不一样,以INFO为例,输出INFO,WARN以上的日志拒绝;
当log4j2.properties和log4j2.xml都在项目resources文件下的时候,生效的配置是log4j2.properties;