log4j 大概的配置方式可分为 2 种:
第一种: log4j.xml 配置
1、 导入架包 log4j-1.2.17.jar
查看附件
2、 写 log4j.xml 的配置内容(部分示例)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <!-- <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> --> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null" debug="null"> <!-- FATAL > ERROR > WARN > INFO > DEBUG --> <!-- ============================================== --> <!-- appender definitions (输出端定义) --> <!-- ============================================== --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %-4r [%t] %-5p %c %x %l %m%n" /> </layout> <!--过滤器设置输出的级别 --> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="debug" /> <param name="levelMax" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <!-- 输出日志到指定日志文件 --> <appender name="file" class="org.apache.log4j.FileAppender"> <!-- 设置File参数:日志输出文件名 --> <param name="File" value="c:/logs/springmvc_logs/file.log"/> <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> <param name="Append" value="true" /> <!-- 设置文件大小 --> <param name="MaxFileSize" value="1MB" /> <!-- 设置文件备份 --> <param name="MaxBackupIndex" value="100" /> <!-- 设置输出文件项目和格式 --> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d|[%t]|%-5p|%c| - %m%n"/> </layout> </appender> <!-- 输出日志到指定日志文件 每天一个日志 --> <appender name="file_daily" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="c:/logs/springmvc_logs/file_dayly.log" /> <param name="Append" value="true"/> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> </layout> </appender> <!-- ============================================== --> <!-- root logger (基础logger定义, 没有定义的logger用这个默认的配置) --> <!-- ============================================== --> <root> <level value="${rootlevel}"/> <appender-ref ref="console" /> <appender-ref ref="file_daily" /> </root> <!-- ============================================== --> <!-- logger definitions (logger定义) additivity 是否遵循缺省的继承机制 root logger,会出现重复日志 --> <!-- ============================================== --> <logger name="com.lw.controller" additivity="false"> <level value="INFO" /> <appender-ref ref="console" /> <appender-ref ref="file_daily" /> <appender-ref ref="file" /> </logger> </log4j:configuration>
3、 web.xml 导入log4j.xml 配置
<!-- 配置加载log4j.xml文件路径 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.xml</param-value> </context-param> <!-- 配置log4j.xml变量 --> <context-param> <param-name>rootLevel</param-name> <param-value>DEBUG</param-value> </context-param> <context-param> <param-name>loggingLevel</param-name> <param-value>INFO</param-value> </context-param> <!-- 配置log4j.xml监听器 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
4、 在需要写日志的类中实例化 log4j的日志类
@Controller public class HelloController { protected Logger log = Logger.getLogger(HelloController.class); // protected Logger log = Logger.getLogger("com.lw.controller"); @RequestMapping("index") public ModelAndView index() { log.info("===============进入 Index 方法"); String str = "Hello World. <br/>This is page index"; return new ModelAndView("index", "str", str); }
第二种: log4j.properties 属性文件配置
1、导入架包(同上)
2、log4j.properties 属性配置
log4j.rootLogger=info, ServerDailyRollingFile, stdout ### 每天生产一个日志文件 log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.ServerDailyRollingFile.DatePattern='-'yyyy-MM-dd'.log' log4j.appender.ServerDailyRollingFile.File=C:/logs/mylog.log log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n log4j.appender.ServerDailyRollingFile.Append=true ### 输出控制台 appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
3、web.xml 配置导入 log4j.properties属性文件、 代码中硬编码导入log4j.properties
<!-- log4j.properties 日志配置属性文件 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param>
或者
PropertyConfigurator.configure("log4j.properties"); // a). 代码中,PropertyConfigurator.configure("bin/log4j.properties"); // b). 代码中,PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));
4、需要写日志的类中实例化日志类(同上)
相关问题及解决方案:
DailyRollingFileAppender(每天产生一个日志文件), 每天生成新文件的时候, 会调用一个 renameTo 的方法, 就是把日志文件改成当前日期对应的文件, 如: mylog.log > renameTo > mylog.log.2015-05-15.log时, 由于 mylog.log 已经打开,在window下是不允许重命名操作的, 所以会报错。 所以改用 复制文件的方式, 自定义copy方法, 代码如下:
原来用的是:
修改以后是:
/** * Copies src file to dst file. If the dst file does not exist, it is * created.4KB cache * 日志文件拷贝好以后, 清空原文件的内容, 保证每次记录的只有当天的内容 * * @param src * @param dst * @throws IOException */ boolean copy(File src, File dst) throws IOException { try { int leave = 1000 * 4; //1024 * 1000; // 文件剩下的字符数 1MB = 1024KB = 1024 * 1000Byte byte[] inOutb;// byte数组接受文件的数据 FileInputStream in = new FileInputStream(src); FileOutputStream out = new FileOutputStream(dst); // 剩余的流数据 inOutb = new byte[leave]; in.read(inOutb, 0, leave); out.write(inOutb); out.flush(); in.close(); out.close(); // 源文件, 清空时需要 FileOutputStream out1 = new FileOutputStream(src); // copy好源文件后, 清空原日志文件内容 out1.write("".getBytes()); out1.close(); return true; } catch (FileNotFoundException e) { LogLog.error("源文件不存在,或者目标文件无法被识别."); return false; } catch (IOException e) { LogLog.error("文件读写错误."); return false; } }
附: log4j 配置参数说明
log4j.rootLogger=日志级别,appender1, appender2, ….
- 日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不区分大小写
- 注意,需在控制台输入,只需将其中一个appender定义为stdout即可
- 注意,rootLogger默认是对整个工程生效
- 注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效
- 注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}
log4j.appender.appender1=org.apache.log4j.日志输出到哪儿
- ConsoleAppender(控制台)
- FileAppender(文件)
- DailyRollingFileAppender(每天产生一个日志文件)
- RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
- WriteAppender(将日志信息以流格式发送到任意指定的地方)
- JDBCAppender(将日志信息保存到数据库中)
log4j.appender.appender1.File=文件目录及文件
${user.home}/logs/...
log4j.appender.appender1.MaxFileSize=最大文件大小
log4j.appender.appender1.MaxBackupIndex=备份文件个数
- 其中,appender1是在第一行定义过的;
- 文件目录及文件,例如,/home/admin/logs/hutudan.log
- 最大文件大小,例如,100KB
- 备份文件个数,例如,1
log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式
- 例如,'-'yyyy-MM-dd'.log'
log4j.appender.appender1.layout=org.apache.log4j.日志布局格式
- HTMLLayout(以HTML表格形式布局)
- SimpleLayout(包含日志信息的级别和信息字符串)
- TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
- PatternLayout(可以灵活的指定布局格式,常用)
log4j.appender.appender1.layout.ConversionPattern=日志输出格式
- 例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
- %c 输出日志信息所属的类的全名
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
- %f 输出日志信息所属的类的类名
- %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
- %m 输出代码中指定的信息,如log(message)中的message
- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
- %r 输出自应用启动到输出该日志信息所耗费的毫秒数
- %t 输出产生该日志事件的线程名
- 可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html
log4j.appender.ServerDailyRollingFile.Append=true
- 例如,不解释,追加往后写便是
总结一下:
- Logger类:完成日志记录,设置日志信息级别
- Appender类:决定日志去向,终端、DB、硬盘
- Layout类:决定日志输出的样式,例如包含当前线程、行号、时间
相关推荐
### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...
Log4j作为Java领域广泛应用的日志框架,提供了强大的日志记录功能和灵活的配置。本文将深入探讨log4j的配置以及配置文件的详解。** 首先,我们要理解什么是`log4j.properties`文件。这是log4j框架的配置文件,使用...
Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助...
logstash采集log4j日志发送到es配置文件,可以把日志根据日志级别区分开,一个级别一条日志是es中的一条数据
动态配置的好处在于可以在运行时更改日志配置,适应不同的环境需求。 以下是一个简单的Java示例,展示了如何在代码中进行动态配置: ```java import org.apache.log4j.BasicConfigurator; import org.apache.log4j...
总之,将Spring的日志配置为Log4j,涉及到引入Log4j库、编写`log4j.properties`配置文件、以及在Spring配置文件中声明使用Log4j。理解这些步骤和配置项对于优化日志记录,排查问题以及监控系统运行状态至关重要。
这种方法不仅提高了日志文件管理的灵活性,还能降低因环境变化导致的日志配置错误风险,从而提高系统的稳定性和可维护性。开发者可以根据自己的需求选择最适合的配置方式,确保日志文件能够在不同的环境中正确输出。
tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...
Mybatis的log4j日志配置文件
### 配置Log4j的详细指南:最佳的日志管理工具 #### 一、引言 在软件开发过程中,良好的日志记录对于调试、维护和性能优化等方面具有至关重要的作用。Log4j作为Apache下的一个开源项目,因其高度灵活性、易配置性...
例如,在Java代码中,可以使用`PropertyConfigurator.reconfigure()`方法重新加载.properties文件,或者直接通过`Logger`类的`setLevel()`和`addAppender()`等方法来改变日志配置。 ```java import org.apache.log4...
【log4j配置文档(记录日志)】 Log4j是Apache开源组织提供的一款强大的Java日志记录框架,它的灵活性和可配置性使得它成为Java开发中的首选日志工具。Log4j允许开发者精确控制日志信息的输出,无论是输出到控制台、...
log4j的主要优势在于其灵活性和可扩展性,允许用户通过配置文件自定义日志记录的方式,无需修改应用程序代码。 #### 二、日志记录的目的 在应用程序中记录日志主要有以下三个目的: 1. **监视代码中变量的变化...
log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志,指纹日志命名规则,日志输出等级等功能
在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入不同的文件,以便于后期分析、排查问题和监控系统状态。 1. **Log4j基本概念** - **Logger**: 日志记录器,是Log4...
Log4j 是一款广泛使用的Java日志记录框架,它提供了灵活的日志配置和丰富的日志级别,便于开发者调试和监控应用程序。在Java开发过程中,如果遇到"log4j:WARN Please initialize the log4j system properly"这样的...
Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...
在`.properties`文件中,配置信息通过键值对的形式呈现,如示例中的`log4j.category.org.zblog=ERROR,A1`,这里指定了`org.zblog`这个logger的日志级别为`ERROR`,并关联到名为`A1`的appender。 2. **.xml格式**:...