Log4j &logback
我们为什么不用System.out.println
➢ 2、调试开发期间,打印详细的运行步骤。 上线运行后,不需要打印这么详细了。
➢ 3、日志输入格式的统一管理。
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>
本文来自博客园,作者:diligently,转载请注明原文链接:https://www.cnblogs.com/luo12828-foxmail/p/16964209.html

浙公网安备 33010602011771号