一. Log4j的配置:
-
1.日志记录器(Logger)的行为等级:
-
分为
OFF
、FATAL
、ERROR
、WARN
、INFO
、DEBUG
、ALL
七个等级,级别从高到低; -
Log4j也支持自己设置自定义行为并分配等级;
-
Log4j建议只使用四个级别: ERROR、WARN、INFO、DEBUG。通过定义输出级别可以控制一些级别不被输出日志。例如倘若定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被输出;
-
所以从上面来说我们最好设置的日志级别为INFO ,或者是DEBUG级别。推荐使用DEBUG级别,可以显示所有的日志。
-
-
2.相关依赖jar包
- apache-log4j-extras-1.2.17.jar
- log4j-1.2.17.jar
-
3.配置文件的准备
-
(1)配置方式
- a.通过properties文件配置:造成输出日志多种行为等级混合,不能很好区分;
- b.通过xml配置,可以控制指定的等级输出到合适的空间中,便于管理
-
(2)配置文件头的编写
-
首先添加xml头文件信息:
a. DOCTYPE:
log4j:configuration
b. SYSTEM:
导入本地约束dtd文件路径
(需在xml–catalog中进行设置)
-
-
(3) web.xml注册log4j.xml的所在路径
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.xml</param-value> <!-- <param-value>/WEB-INF/log4j.properties</param-value> --> </context-param>
-
-
xml代码:
1.头部代码及相关说明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "E:\study\Java\javaweb相关资料\log4j\apache-log4j-1.2.17\src\main\resources\org\apache\log4j\xml\log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- ========================== 自定义输出格式说明================================ -->
<!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
<!-- %r 输出自应用启动到输出该log信息耗费的毫秒数 -->
<!-- %c 输出所属的类目,通常就是所在类的全名 -->
<!-- %t 输出产生该日志事件的线程名 -->
<!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
<!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日
22:10:28,921 -->
<!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlo4.main(TestLog4.java:10) -->
<!-- ========================================================================== -->
<!-- ========================== 输出方式说明================================ -->
<!-- Log4j提供的appender有以下几种: -->
<!-- org.apache.log4j.ConsoleAppender(控制台), -->
<!-- org.apache.log4j.FileAppender(文件), -->
<!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
<!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), -->
<!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) -->
<!-- ========================================================================== -->
2.定义debug输出信息
<appender name="log4jDebug" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:/UserManager/logs/logDebug.log" />
<!-- 是否可延长 -->
<param name="Append" value="true" />
<!-- 文件达到指定尺寸时生成新文件 -->
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="E:/UserManager/logs/logDebug_%d{yyyy-MM-dd}.log" />
</rollingPolicy>
<!-- 定义输出格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c Method: %l ]%n%p:%m%n" />
</layout>
<!-- 过滤器,指定的等级将被写入该日志文件 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
3.定义info输出信息
<appender name="log4jInfo" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:/UserManager/logs/logInfo.log" />
<!-- 是否可延长 -->
<param name="Append" value="true" />
<!-- 文件达到指定尺寸时生成新文件 -->
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="E:/UserManager/logs/logInfo_%d{yyyy-MM-dd}.log" />
</rollingPolicy>
<!-- 定义输出格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c Method: %l ]%n%p:%m%n" />
</layout>
<!-- 过滤器,指定的等级将被写入该日志文件 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
4.定义控制台输出信息
<!-- 控制台输出 -->
<appender name="cmd" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="info" />
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n" />
</layout>
<!-- <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin"
value="DEBUG" /> <param name="levelMax" value="DEBUG" /> </filter> <filter
class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch"
value="需要过滤的信息片段" /> <param name="AcceptOnMatch" value="false" /> </filter>
<filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch"
value="需要过滤的信息片段" /> <param name="AcceptOnMatch" value="false" /> </filter> -->
</appender>
5.定义warn输出信息
<appender name="log4jWarn" class="org.apache.log4j.RollingFileAppender">
<!-- 是否可延长 -->
<param name="Append" value="true" />
<!-- 文件达到指定尺寸时生成新文件 -->
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="E:/UserManager/logs/logWarn_%d{yyyy-MM-dd}.log" />
</rollingPolicy>
<!-- 定义输出格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionParttern"
value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c Method: %l ]%n%p:%m%n" />
</layout>
<!-- 过滤器,指定的等级将被写入该日志文件 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
6.定义error输出信息
<appender name="log4jError" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:/UserManager/logs/logError.log" />
<!-- 是否可延长 -->
<param name="Append" value="true" />
<!-- 文件达到指定尺寸时生成新文件 -->
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="E:/UserManager/logs/logError_%d{yyyy-MM-dd}.log" />
</rollingPolicy>
<!-- 定义输出格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c Method: %l ]%n%p:%m%n" />
</layout>
<!-- 过滤器,指定的等级将被写入该日志文件 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- 通过发送邮件的方式输出日志文件 -->
<!-- <appender name="Mail" class="SMTPAppender"> -->
<!-- 设定输出级别 -->
<!-- <param name="threshold" value="info" /> -->
<!-- 缓存文件大小,日志达到512K时发送Email -->
<!-- <param name="BufferSize" value="512" />单位K -->
<!-- <param name="From" value="test@163.com" /> -->
<!-- <param name="SMTPHost" value="smtp.163.com" /> -->
<!-- <param name="Subject" value="juyee-log4jMessage" /> -->
<!-- <param name="To" value="test@163.com" /> -->
<!-- <param name="SMTPUsername" value="test" /> -->
<!-- <param name="SMTPPassword" value="test" /> -->
<!-- <layout class="org.apache.log4j.PatternLayout"> -->
<!-- <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS
a} [%p]-[%c] %m%n" /> -->
<!-- </layout> -->
<!-- </appender> -->
7.定义全局输出方式,即指定真正执行的相关appender
<!-- 全局输出的方式 -->
<root>
<priority value="debug" />
<appender-ref ref="log4jInfo" />
<appender-ref ref="log4jError" />
<appender-ref ref="cmd" />
</root>
</log4j:configuration>
二. Log4j的应用:
-
在指定的service类下应用示例:
-
serviceImpl类代码
private Logger log = Logger.getLogger(SysUserServiceImpl.class); @Override public int addSysUser(SysUser sysUser) { log.info("add user named "+sysUser.getUserName()+"and whose password is "+sysUser.getPassword()); return sysUserDao.addSysUser(sysUser); }
-
当插入相关数据,后在指定的路径生成log文件,并记录插入信息
1.
插入测试数据name=测试3 password=1
2.logoInfo.txt中新增的记录
2019-06-05 23:39:12 下午 [Thread: http-bio-8080-exec-8] [ Class:com.usermanager.service.SysUserServiceImpl Method: com.usermanager.service.SysUserServiceImpl.addSysUser(SysUserServiceImpl.java:24) ] INFO:add user named 测试3and whose password is 1
-