Logo

郎哥编程

创建log4j配置文件

2019-07-06 183

log4j是Apache为Java开发者提供的日志库,通俗说就是log for java,是给Java程序提供日志输出的工具。

Java在设计之初,充分借鉴了C等其它编程语言的优点,其语言的简洁性、易使用性以及跨平台性都非常不错,唯独没有设计日志系统。这可苦了早期Java开发者了,当写完的程序运行后,若发布的程序运行结果和预期的不一样,开发者要发现程序所存在的问题,只能采用调试的方式逐一排查,费时费力。若程序已提交给客户,在客户环境下出现了问题,是无法进行调试排查的,只能寄希望于问题在开发环境中重现。

难以发现程序运行中出现的问题,是早期Java的一个短板,为了解决这个短板。Apache开发了log4j,log4j可以把程序运行过程中的重要信息输出到文件中,这些重要信息的输出是由Java开发者来确定的,也就是说开发者在开发程序时,会把一些可能出现问题的变量、执行的语句状态、重要的节点信息写到文件中,当程序在运行过程中出现问题时,就可以从这些文件中跟踪程序的运行信息,及时发现程序存在的问题,写入程序运行信息的文件被称为系统日志,log4j就是用来写系统日志的程序。

前面说过,Spring框架依赖log4j日志库,因此还需要对log4j进行配置,前面我们在部署MyBatis框架时已经安装了log4j日志库,下面我们创建log4j需要的配置文件。log4j的配置文件可以是XML文件,也可以是文本文件。这里我们采用XML文件。在eshop项目src目录下新建log4j2.xml文件,输入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 设置log4j2的自身log级别为warn -->
<!-- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<configuration status="WARN" monitorInterval="30">
    <appenders>
        <console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>
 
        <RollingFile name="RollingFileInfo" fileName="d:/logs/info.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->         
            <Filters>
                <ThresholdFilter level="INFO"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
 
        <RollingFile name="RollingFileWarn" fileName="d:/logs/warn.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="WARN"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
 
        <RollingFile name="RollingFileError" fileName="d:/logs/error.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="ERROR"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
 
    </appenders>
 
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <root level="all">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>
 
</configuration>

log4j会读取这个配置文件。log4j为什么需要这个配置文件呢?因为log4j可以把更多的日志输出控制权交给开发者。举个例子,如果没有配置文件,log4j会把日志输出到一个固定的位置,你没有任何办法想让它把日志文件输出到你指定的位置;再来一个例子,假如你想自己定义输出的日志格式,没有配置文件,你无能为力。

配置文件中的appenders标签是用来定义日志输出位置的,在这个标签下输出位置可以定义多个,每个位置由子标签来定义。如上面配置文件的Console标签定义了日志信息输出到控制台。Console标签下的PatternLayout标签定义了日志的输出格式,标签的pattern属性用来配置日志输出的格式,在这里你可以更改为自己喜欢的输出格式,至于具体怎么改,网上一大堆,这里就不细说了,不过一般来说保持默认的输出格式就可以了。

File标签是配置输出日志信息到文件,标签的fileName属性指定日志文件的路径。

配置文件中的loggers标签用来定义日志输出范围,对日志信息进行级别限制,在log4j中根据输出日志信息的重要程度,将日志主要分为六个级别,按重要程度排序为fatal(致命)、error(错误)、warn(警告)、info(信息)、debug(调试)、trace(追踪)。其中,最常用的是error和info,当程序能够自己捕捉到错误,但错误不影响系统运行时,用error输出错误和异常信息;在程序运行过程中,特别是在客户环境下运行时,可以输出一些程序的重要信息,用于发现程序的潜在问题,这是可以用info输出信息。

loggers标签下的root标签中level属性可以限制日志的输出级别,当level属性设置为info级别时,log4j只输出info级别以上的日志,即使你在程序中输出了低于info级别的日志,log4j也不会让这些日志信息输出。

至此,web.xml、Spring框架的配置文件、log4j配置文件都已配置完毕,Spring框架已经集成到项目中。在eclispe中运行eshop项目的index.jsp文件,eclispe会启动前面课程配置的server,如果server启动成功,则说明配置正确,如果server启动失败,说明配置文件有问题,可以查看控制台输出信息,查找问题出现原因并解决。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论