导入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;