写点什么

Log4j 使用指南,java 入门视频教程

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:6189 字

    阅读完需:约 20 分钟

log4j.appender.A2.File=dglog.txt



注意将 A2 替换为具体配置中 Appender 的别名。

4.2.3??????? DailyRollingAppender

使用 FileAppender 可以将 log 信息输出到文件中,但是如果文件太大了读起来就不方便了。这时就可以使用 DailyRollingAppender。DailyRollingAppender 可以把 Log 信息输出到按照日期来区分的文件中。配置文件就会每天产生一个 log 文件,每个 log 文件只记录当天的 log 信息:



log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender



log4j.appender.A2.file=dglog



log4j.appender.A2.DatePattern='.'yyyy-MM-dd



log4j.appender.A2.layout=org.apache.log4j.PatternLayout



log4j.appender.A2.layout.ConversionPattern= %5r %-5p %c{2} - %m%n

4.2.4??????? RollingFileAppender

文件大小到达指定尺寸的时候产生一个新的文件。


log4j.appender.R=org.apache.log4j.RollingFileAppender


log4j.appender.R.File= ../logs/dglog.log # Control the maximum log file size


log4j.appender.R.MaxFileSize=100KB # Archive log files (one backup file here)


log4j.appender.R.MaxBackupIndex=1


log4j.appender.R.layout=org.apache.log4j.PatternLayout


log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 这个配置文件指定了输出源 R,是一个轮转日志文件。最大的文件是 100KB,当一个日志文件达到最大尺寸时,Log4J 会自动把 example.log 重命名为 dglog.log.1,然后重建一个新的 dglog.log 文件,依次轮转。

4.2.5??????? WriterAppender

将日志信息以流格式发送到任意指定的地方。


4.3???????? Layout 的配置




Layout 指定了 log 信息输出的样式。

4.3.1??????? 布局样式

org.apache.log4j.HTMLLayout(以 HTML 表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

4.3.2???????? 格式

%m 输出代码中指定的消息 %p 输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该 log 信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows 平台为"rn",Unix 平台为"n" %d 输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002 年 10 月 18 日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(Test Log4.java:10)

4.3.3??????? 例子

例子 1:显示日期和 log 信息


log4j.appender.A2.layout=org.apache.log4j.PatternLayout


log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %m%n 打印的信息是: 2002-11-12 11:49:42,866 SELECT * FROM Role WHERE 1=1 order by createDate desc



例子 2:显示日期,log 发生地方和 log 信息


log4j.appender.A2.layout=org.apache.log4j.PatternLayout


log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %l "#" %m%n 2002-11-12 11:51:46,313 cn.net.unet.weboa.system.dao.RoleDAO.select(RoleDAO.java:409) "#" SELECT * FROM Role WHERE 1=1 order by createDate desc? ?



例子 3:显示 log 级别,时间,调用方法,log 信息


log4j.appender.A2.layout=org.apache.log4j.PatternLayout


log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n log 信息: [DEBUG] 2002-11-12 12:00:57,376 method:cn.net.unet.weboa.system.dao.RoleDAO.select(RoleDAO.java:409) SELECT * FROM Role WHERE 1=1 order by createDate desc


4.4???????? Properties 配置文件实例




log4j.rootLogger=DEBUG #将 DAO 层 log 记录到 DAOLog,allLog 中


log4j.logger.DAOLog=DEBUG,A2,A4 #将逻辑层 log 记录到 BusinessLog,allLog 中


log4j.logger.Businesslog=DEBUG,A3,A4


#A1--打印到屏幕上


log4j.appender.A1=org.apache.log4j.ConsoleAppender


log4j.appender.A1.layout=org.apache.log4j.PatternLayout


log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n


#A2--打印到文件 DAOLog 中--专门为 DAO 层服务


log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender


log4j.appender.A2.file=DAOLog


log4j.appender.A2.DatePattern='.'yyyy-MM-dd


log4j.appender.A2.layout=org.apache.log4j.PatternLayout


log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


#A3--打印到文件 BusinessLog 中--专门记录逻辑处理层服务 log 信息


log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender


log4j.appender.A3.file=BusinessLog


log4j.appender.A3.DatePattern='.'yyyy-MM-dd


log4j.appender.A3.layout=org.apache.log4j.PatternLayout


log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


#A4--打印到文件 alllog 中--记录所有 log 信息


log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender


log4j.appender.A4.file=alllog


log4j.appender.A4.DatePattern='.'yyyy-MM-dd


log4j.appender.A4.layout=org.apache.log4j.PatternLayout


log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


5???????? Log4j 高级配置


===================


5.1???????? 配置记录日志的包路径




配置 Log4j.logger.com.int97=debug, 只有包为 com.int97 中代码的 debug 信息被输出到指定的输出源。


5.2???????? 支持日志级别继承功能




《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


如果 log4j.rootLogger=debug,其他 logger 默认级别为 debug。可以通过配置 log4j.additivity.XXX=ture/false 来打开或关闭继承功能;若为 false,表示 Logger 的 appender 不继承它的父 Logger; 若为 true,则继承,这样就兼有自身的设定和父 Logger 的设定。


5.3???????? 为不同的 Appender 设置日志输出级别




通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是 DEBUG 级别,查找异常不是很方便。Log4j 提供仅保存异常的日志功能,只需要在配置中修改 Appender 的 Threshold 就能实现,比如下面的例子:



[配置文件]



### set log levels ###


log4j.rootLogger = debug ,? stdout ,? D ,? E


### 输出到控制台 ###


log4j.appender.stdout = org.apache.log4j.ConsoleAppender


log4j.appender.stdout.Target = System.out


log4j.appender.stdout.layout = org.apache.log4j.PatternLayout


log4j.appender.stdout.layout.ConversionPattern =? %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n


### 输出到日志文件 ###


log4j.appender.D = org.apache.log4j.DailyRollingFileAppender


log4j.appender.D.File = logs/log.log


log4j.appender.D.Append = true


log4j.appender.D.Threshold = DEBUG ## 输出 DEBUG 级别以上的日志


log4j.appender.D.layout = org.apache.log4j.PatternLayout


log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}? [ %t:%r ] - [ %p ]? %m%n


### 保存异常信息到单独文件 ###


log4j.appender.D = org.apache.log4j.DailyRollingFileAppender


log4j.appender.D.File = logs/error.log ## 异常日志文件名


log4j.appender.D.Append = true


log4j.appender.D.Threshold = ERROR ## 只输出 ERROR 级别以上的日志!!!


log4j.appender.D.layout = org.apache.log4j.PatternLayout


log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}? [ %t:%r ] - [ %p ]? %m%n


5.4???????? Xml 格式配置文件实例





<?xml version="1.0" encoding="GB2312"?>




<!DOCTYPE


log4j:configuration SYSTEM "log4j.dtd">


<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">





?????? <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">


????????????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d %-5p - [%C{1}] %m%n"/>


????????????? </layout>


?????? </appender>


?????? <appender name="myApp.file.log" class="org.apache.log4j.RollingFileAppender">


????????????? <param name="File" value="${myApp.root}/WEB-INF/logs/myApp.log"/>


????????????? <param name="Append" value="true"/>


????????????? <param name="MaxBackupIndex" value="3"/>


????????????? <param name="MaxFileSize" value="2MB" />


????????????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>


????????????? </layout>


?????? </appender>


?????? <appender name="moduleA.log"?? class="org.apache.log4j.RollingFileAppender"> ?


????????????? <param name="Append" value="true"?? /> ?


????????????? <param name="File" value="${myApp.root}/WEB-INF/logs/moduleA.log"?? /> ?


????????????? <param name="MaxFileSize" value="2MB"/> ?


????????????? <param name="MaxBackupIndex" value="10"?? /> ?


????????????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>


????????????? </layout>


????????????? <filter class="org.apache.log4j.varia.StringMatchFilter">


???????????????????? <param name="StringToMatch" value=" MODULE_A TASK" />


???????????????????? <param name="AcceptOnMatch" value="true" />


????????????? </filter>


?????? </appender>


?????? <appender name="moduleB.log"?? class="org.apache.log4j.RollingFileAppender"> ?


??????? <param name="Append" value="true"?? /> ?


??????? <param name="File" value="${myApp.root}/WEB-INF/logs/moduleB.log"?? /> ?


??????? <param name="MaxFileSize" value="2MB"/> ?


??????? <param name="MaxBackupIndex" value="10"?? /> ?


??????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>


??????? </layout>


?????? <filter class="org.apache.log4j.varia.StringMatchFilter">


???????????? <param name="StringToMatch" value="MODULE_B_TASK_" />


???????????? <param name="AcceptOnMatch" value="true" />


????? </filter>


??? </appender>


??? <logger name="com.levinsoft.myApp.task.FileTaskThread">


?????????? <level value="DEBUG"/>


?????????? <appender-ref ref="moduleA.log"/>


?????????? <appender-ref ref="moduleB.log"/>


??? </logger>


??? <appender name="authorization.log.debug"?? class="org.apache.log4j.RollingFileAppender"> ?


??????? <param name="Append" value="true"?? /> ?


??????? <param name="File" value="${myApp.root}/WEB-INF/logs/authorization_debug.log"?? /> ?


??????? <param name="MaxFileSize" value="2MB"/> ?


??????? <param name="MaxBackupIndex" value="3"?? /> ?


??????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>


??????? </layout>


??????? <filter class="org.apache.log4j.varia.LevelRangeFilter">


?????????????? <param name="LevelMin" value="debug" />


?????????????? <param name="LevelMax" value="debug" />


?????????????? <param name="AcceptOnMatch" value="true" />


??????? </filter>


??? </appender>


??? <appender name="authorization.log.error" class="org.apache.log4j.RollingFileAppender"> ?


??????? <param name="Append" value="true"?? /> ?


??????? <param name="File" value="${myApp.root}/WEB-INF/logs/authorization_error.log"?? /> ?


??????? <param name="MaxFileSize" value="2MB"/> ?


??????? <param name="MaxBackupIndex" value="3"?? /> ?


??????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>


??????? </layout>


??????? <filter class="org.apache.log4j.varia.LevelRangeFilter">


????????????? <param name="LevelMin" value="error" />


????????????? <param name="LevelMax" value="error" />


????????????? <param name="AcceptOnMatch" value="true" />


??????? </filter>


??? </appender>


??? <logger name="com.levinsoft.myApp.authorization">


?????????? <level value="DEBUG"/>


?????????? <appender-ref ref="authorization.log.debug"/>


?????????? <appender-ref ref="authorization.log.error"/>


??? </logger>


??? <logger name="com.levinsoft.qframe.taglib.CollectionTag">


?????????? <level value="WARN"/>


??? </logger>


?????? <appender name="moduleC_error.log"?? class="org.apache.log4j.RollingFileAppender"> ?


??????? <param name="Append" value="true"?? /> ?


??????? <param name="File" value="${myApp.root}/WEB-INF/logs/moduleC_error.log"?? /> ?


??????? <param name="MaxFileSize" value="2MB"/> ?


??????? <param name="MaxBackupIndex" value="10"?? /> ?


??????? <layout class="org.apache.log4j.PatternLayout">


???????????????????? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>


????????????? </layout>


??????? <filter class="org.apache.log4j.varia.LevelRangeFilter">


?????????????? <param name="LevelMin" value="error" />


?????????????? <param name="LevelMax" value="error" />


?????????????? <param name="AcceptOnMatch" value="true" />


??????? </filter>


??? </appender>


??? <logger name="com.levinsoft.myApp.search.ModuleC">


????????????? <level value="ERROR"/>


????????????? <appender-ref ref="moduleC_error.log"/>


??? </logger>


??? <logger name="com.levinsoft">


????????? <level value="DEBUG"/>




??? </logger>


??? <root>


????????? <level value="WARN"/>


????????? <appender-ref ref="STDOUT"/>


????????? <appender-ref ref="myApp.file.log"/>








??? </root>


</log4j:configuration>




6???????? Spring 对 log4j 的支持


=========================


Log4jConfigurer、 Log4jConfigListener、Log4jConfigServlet 对 dom4j 进行配置或封装。org.springframework.web.util 还包括了对其他工具类的封装。


6.1??????? log4j 配置文件放置路径




在 web.xml 文件中,可以指定 log4j 配置文件的放置位置。缺省情况下,系统在 WEB-INF/classes 目录下查找。也可以在 web.xml 文件中指定一个位置,例如:系统将自动的进行加载。


<context-param>



          <param-name>log4jConfigLocation</param-name>



          <param-value>/WEB-INF/classes/log4j.xml</param-value>



</context-param>


6.2??????? log4j 文件中引用 web.xml 中的属性




用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Log4j使用指南,java入门视频教程