Log4j &logback

我们为什么不用System.out.println

➢ 1、日志文件的输出和管理。
➢ 2、调试开发期间,打印详细的运行步骤。 上线运行后,不需要打印这么详细了。
➢ 3、日志输入格式的统一管理。
➢ 4、日志输入到其他的数据源,比如数据库、缓 存数据库、消息中间件。 
➢ 5、 不被其他程序员鄙视。

log4j官方定义

Log4j是Apache的一个开源项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、 文件、GUI组件,甚至是套接口服务器、NT的事件记 录器、UNIX Syslog守护进程等;我们也可以控制每 一条日志的输出格式;通过定义每一条日志信息的级 别,我们能够更加细致地控制日志的生成过程。最令 人感兴趣的就是,这些可以通过一个配置文件来灵活 地进行配置,而不需要修改应用的代码

从哪获得

http://logging.apache.org/

jar包:log4j-1.2.17.jar

怎么用

 

怎么配

log4j.properties 的结构

Appender的常用类型

➢org.apache.log4j.ConsoleAppender(输出到控制台) 

➢org.apache.log4j.FileAppender(输出到文件) 

➢org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件) ➢org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件) 

Appender的常用类型

ConsoleAppender 

.target =System.out   :默认值System.out,输出到哪种控制台

FileAppender 

.file =C:\\log4j.log:指定消息输出到C:\\log4j.log文件 .Encoding = UTF-8:可以指定文件编码格式

DailyRollingFileAppender

.file =C:\\log4j.log:指定消息输出到C:\log4j.log文件 

.Encoding = UTF-8:可以指定文件编码格式 

.DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。 还可以按用以下参数: 

'.'yyyy-MM:每月 

'.'yyyy-ww:每周 

'.'yyyy-MM-dd:每天 

'.'yyyy-MM-dd-a:每天两次 

'.'yyyy-MM-dd-HH:每小时 

'.'yyyy-MM-dd-HH-mm:每分钟

RollingFileAppender

.file =C:\\log4j.log:指定消息输出到C:\log4j.log文件 

.Encoding = UTF-8:可以指定文件编码格式

 .MaxFileSize = 100KB:后缀可以是KB,MB,GB.在日志文件到达该大小 时,将会自动滚动.如:log4j.log.1

 .MaxBackupIndex = 2: 指定可以产生的滚动文件的最大数,默认是2

Layout

Log4j提供的layout有以下几种 

➢ org.apache.log4j.HTMLLayout(以HTML表格形式布局) 

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

➢ org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) 

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

➢ )org.apache.log4j.xml.XMLLayout(以XML形式布局) 

PatternLayout(自定义布局)

ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p (%C:%M) - %m%n
含义:

# %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格 式

 #    如:%d{yyyy年MM月dd日HH:mm:ss,SSS},输出类似:2012年01月05日 22:10:28,921

# %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL,p前面的数字表示占字位。 

# %m 输出代码中指定的消息 

# %C 输出所属的类目,通常就是所在类的全名 

# %c 输出Logger.getLogger(Clazz class)中参数的class名 

# %t 输出产生该日志事件的线程名 # %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 

# %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 

#    如:Testlog.main(TestLog.java:10) 

# %F 输出日志消息产生时所在的文件名称 # %L 输出代码中的行号 

# %% 输出一个"%"字符

Level

1、OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 

2、Log4j建议用:ERROR、WARN、INFO、DEBUG 

3、级别为:debug<info<warn<error 假如选择级别为info,往后靠,打印出大于info全部级别

Logger(控制器)

 

以什么样的格式,按照日志优先级别,将日志输出到哪?

Logger控制器的选择

级别看精确,输出为各自

log4j.xml 配置起来是否跟log4j.properties一致

➢ logback.xml 继承了log4j.properties功能结构,只是以xml 方式实现。

➢ 有新的扩展filter

插件安装 PropertiesEditor

 

完整配置:

name logback 加载前置于properties文件,因此properties文件中可能会出现读取不到properties中配置的环境内容,或者是项目的 文件路径

logback-spring.xml加载位于properties文件之后,可以读取到properties文件配置的属性内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <property resource="application.properties"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <!--参考地址:
    https://www.cnblogs.com/gavincoder/p/10091757.html
    -->

        <property name="LOG_NAME" value="daily-test"/>
        <property name="LOG_HOME" value="./log/${LOG_NAME}"/>


    <!--控制台日志, 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${LOG_HOME}/${LOG_NAME}_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--只保留最近90天的日志-->
            <maxHistory>5</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <totalSizeCap>20MB</totalSizeCap>
        </rollingPolicy>
<!--        <Policies>-->
<!--            <SizeBasedTriggeringPolicy size="5MB"/>-->
<!--            <TimeBasedTriggeringPolicy interval="1" modulate="false"/>-->
<!--        </Policies>-->
<!--        <DefaultRolloverStrategy max="2"/>-->
        <!--日志输出编码格式化-->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--<springprofile name="test,dev">-->
        <logger level="info" name="com.lt.dailytest.controller.MailContollerTest"></logger>

        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
        <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/>
        <logger name="org.hibernate.SQL" level="DEBUG"/>
        <logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
        <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>

        <!--myibatis log configure-->
        <logger name="com.apache.ibatis" level="TRACE"/>
        <logger name="java.sql.Connection" level="DEBUG"/>
        <logger name="java.sql.Statement" level="DEBUG"/>
        <logger name="java.sql.PreparedStatement" level="DEBUG"/>
   <!-- </springprofile>-->


    <!-- 日志输出级别 -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

 

posted @ 2022-12-07 18:38  diligently  阅读(82)  评论(0)    收藏  举报