之前使用lo4j的日志管理,但是一直没有总结和记录下来,现在有时间就记录一下
log4j使用主要分为3个部分:1环境configurator的配置,2项目中logger的日志信息记录3.属性文件的具体配置
1和2使用实例代表,其使用非常简单,在spring,struts2,mybatis,hibernate具有使用,你在使用框架的时候其实已经在记录这些日志,操作非常简单
1:configurator为basicconfigutor,PropertyConfigurator ,DOMConfigurator三中,具体为下代码(均使用绝对路径,项目中不要这么做)
package log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class Logtest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Logtest testlog=new Logtest();
testlog.getDoucment();
}
//最简单的处理方式,默认加载log4j的属性文件log4j.properties,什么操作都不需要
public void getbasic(){
BasicConfigurator.configure();
Logger log =Logger.getLogger(this.getClass());
log.debug("1dfekf");
log.warn("1warn");
}
//其实在项目中使用propertiesconfigurator主要配置不同log4j.properties属性文件,其动态修改不会很多,就算修改,也是直接改,在configure中定期读取就可以了
//而其中使用的properties并不是log4j的,是jsk自带处理属性文件,如struts.properties,功能是很强大,但是用的少
public void getproperty() throws IOException{
File file=new File("D:/workplace/new_workplace/test/src/log4j.properties");//仅供测试所用,此路径不能在项目中使用
FileInputStream input=new FileInputStream(file);
Properties pro=new Properties();
pro.load(input);//通过properties属性来进行动态修改properties文件
input.close();
System.out.println(pro.getProperty("log4j.appender.R"));//获取日志属性
System.out.println(pro.containsKey("log4j.appender.R"));//判断属性是否存在
pro.setProperty("log4j.appender.R.File", "D:/workplace/new_workplace/test/src/logtest.txt");//动态修改属性文件
//如需要本地保存,则将结合输出流
FileOutputStream output=new FileOutputStream(file);
pro.store(output, "本地保存");
output.close();
PropertyConfigurator.configure(pro);//日志环境配置确认
Logger log =Logger.getLogger(this.getClass());//日志记录
log.debug("2dfekf");
log.warn("2warn");
log.error("eor");
}
//这个应该是用来解析log的xml形式的属性配置,说实话,我没碰到到项目中使用这种方式
public void getDoucment(){
DOMConfigurator.configure("D:/workplace/new_workplace/test/src/log4js.xml");
Logger log =Logger.getLogger(this.getClass());
log.debug("3dfekf");
log.warn("3warn");
log.info("3info");
log.error("3error");
log.fatal("3fatol");
}
public static String getpath(){
return Logtest.class.getResource("/").toString();
}
}
log4j.properties
#\u672C\u5730\u4FDD\u5B58
#Tue Apr 29 19:19:23 CST 2014
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n
log4j.appender.R.File=D\:/workplace/new_workplace/test/src/logt.txt
log4j.rootLogger=DEBUG, A1 ,R
log4j.appender.R.MaxFileSize=250KB log4j.appender.R.MaxBackupIndex\=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration 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 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.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(将日志信息以流格式发送到任意指定的地方) -->
<!-- ========================================================================== -->
<!-- 输出到日志文件 -->
<appender name="log4jTestDebug" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:\\workplace\\new_workplace\\test\\src\\logxml.txt"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="5KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="DEBUG"/>
</filter>
</appender>
<appender name="log4jTestLogInfo" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:\\workplace\\new_workplace\\test\\src\\logxml.txt"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="5KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}-- %p -- %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO"/>
</filter>
</appender>
<!--通过<category></category>的定义可以将各个包中的类日志输出到不同的日志文件中-->
<category name="com.gzy">
<priority value="debug" />
<appender-ref ref="log4jTestLogInfo" />
<appender-ref ref="log4jTestDebug" />
</category>
<root>
<priority value="debug"/>
</root>
</log4j:configuration>
3具体属性文件配置,我没有把握好,这里就引入一个其他人写好的,非常不错,具体网址忘了
log4j.rootLogger=DEBUG,A1,A3,E,W,I,D
#??????????
log4j.logger.com.log4j.test=DEBUG,PKG
log4j.appender.A1=org.apache.log4j.lf5.LF5Appender
log4j.appender.A1.MaxNumberOfRecords=700
log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A4.file=${catalina.home}/webapps/game/log/d.log
log4j.appender.A4.DatePattern='.'yyyyMMdd
log4j.appender.A4.layout=org.apache.log4j.PatternLayout
log4j.appender.A4.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=${catalina.home}/webapps/game/log/r.log
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=999
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.file=${catalina.home}/webapps/game/log/error.log
log4j.appender.E.MaxFileSize=1024KB
log4j.appender.E.MaxBackupIndex=999
#??ERROR???????
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
log4j.appender.W=org.apache.log4j.RollingFileAppender
log4j.appender.W.file=${catalina.home}/webapps/game/log/warn.log
log4j.appender.W.MaxFileSize=1024KB
log4j.appender.W.MaxBackupIndex=999
#??WARN???????
log4j.appender.W.Threshold=WARN
log4j.appender.W.layout=org.apache.log4j.PatternLayout
log4j.appender.W.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
log4j.appender.I=org.apache.log4j.RollingFileAppender
log4j.appender.I.file=${catalina.home}/webapps/game/log/info.log
log4j.appender.I.MaxFileSize=1024KB
log4j.appender.I.MaxBackupIndex=999
#??INFO???????
log4j.appender.I.Threshold=INFO
log4j.appender.I.layout=org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
log4j.appender.D=org.apache.log4j.RollingFileAppender
log4j.appender.D.file=${catalina.home}/webapps/game/log/debug.log
log4j.appender.D.MaxFileSize=1024KB
log4j.appender.D.MaxBackupIndex=999
#??DEBUG???????
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
#????Appender
log4j.appender.PKG=org.apache.log4j.RollingFileAppender
log4j.appender.PKG.file=${catalina.home}/webapps/game/log/pkg.log
log4j.appender.PKG.MaxFileSize=1024KB
log4j.appender.PKG.MaxBackupIndex=999
log4j.appender.PKG.layout=org.apache.log4j.PatternLayout
log4j.appender.PKG.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
相关推荐
在IT行业中,日志记录是系统监控、故障排查和审计的关键环节。然而,日志中往往包含敏感信息,如用户身份、密码、个人...在实际项目中,应结合业务需求和安全策略,灵活运用这些方法,构建高效且安全的日志管理系统。
此压缩包提供的资源是针对Tomcat8及其以下版本的日志管理解决方案,主要涉及Log4j这个流行的Java日志框架。下面将详细介绍如何在Tomcat8中替换或更新Log4j来记录日志。 首先,让我们了解一下Log4j。Log4j是Apache...
### Log4j日志管理详解 #### 一、Log4j概述 Log4j是一款流行的开源日志框架,由Apache软件基金会提供。它允许开发者在应用程序中加入日志功能,以便于跟踪程序运行过程中的各种状态信息。Log4j的核心设计理念在于...
参照了几个网上大神配置,部分教程的描述有误,最终调试完成,可以实现kettle日志输出,测试版本...需要替换的文件为,Kettle的程序目录下data-integration-6.0\plugins\kettle5-log4j-plugin中有一个log4j.xml文件。
Log4j是一款广泛使用的Java日志记录框架,它允许开发者按照功能模块或特定需求记录应用程序运行过程中的事件信息。在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入...
本文将详细介绍如何在Android Studio中使用log4j库来记录日志,并实现按照日志文件大小自动滚动的功能,以及如何进行日志内容的格式化输出。 首先,log4j是一款广泛使用的日志记录框架,它提供了灵活的日志配置和...
总之,配置Tomcat 9使用SLF4J和Log4j2进行日志记录是一个涉及依赖管理、日志配置文件设置和Tomcat自身配置的过程。通过上述步骤,你应该能够成功解决“tomcat9 slf4j+log4j2 不写日志”的问题。如果在实践中遇到问题...
在Java开发中,日志记录是一项非常重要的任务,它能够帮助开发者追踪程序运行时的状态,定位错误和异常,便于后期的调试...总之,理解和掌握Log4j的使用,能够极大地方便开发者进行日志管理和故障排查,提升开发效率。
在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发效率和系统的可维护性。本文将详细介绍两种常见的 Log4j 配置方式:Tomcat 级别的统一日志管理和每个 web 应用分别配置 Log4j,...
正确理解和使用`log4j.properties`文件,将使日志管理变得更加高效和便捷。同时,不断学习和探索log4j的高级特性,如异步日志、MDC(Mapped Diagnostic Context)等,可以进一步提升日志系统的实用性和可维护性。
通过阅读和分析这些代码,你可以更深入地理解Log4j的使用方法,以及DailyRollingFileAppender如何处理日志文件的滚动和删除。 总之,Log4j的DailyRollingFileAppender结合`maxBackupIndex`参数,可以很好地满足对...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
### Log4j日志管理系统简单使用说明 #### 一、Log4j简介 Log4j是一款流行的开源日志框架,由Apache软件基金会提供。它能够帮助开发者以灵活且高效的方式记录应用程序的日志信息。Log4j的核心组成部分包括:Loggers...
Log4j是Apache提供的一款广泛使用的日志框架,它提供了丰富的功能和灵活的配置,使得我们可以根据需要动态地改变日志的输出路径。本文将深入探讨如何在Log4j中实现日志输出路径的动态配置。 首先,我们要理解Log4j...
`Log4j`作为一款优秀的日志管理工具,被广泛应用于Java应用程序中。然而,在不同的开发环境下,日志文件的存储路径往往需要根据实际情况进行调整,这不仅增加了维护成本,还可能导致日志丢失或错误记录。因此,采用...
Log4j是Apache提供的一款广泛使用的日志框架,它提供了丰富的配置选项,允许开发者灵活地控制日志输出。当我们面对特定项目需求,比如需要自定义日志文件名和日志输出格式时,Log4j同样提供了相应的解决方案。 首先...
在Spring的bean中,我们可以使用`@PostConstruct`和`@PreDestroy`注解来标记初始化和销毁方法,同时在这些方法中插入Log4j的日志记录,以便追踪bean的生命周期。例如: ```java @Service public class MyService { ...
总的来说,Log4j2作为日志框架的新一代产品,提供了许多增强的功能和优化,能够更好地满足开发者对日志管理的需求。对于大型企业和复杂系统,正确配置和使用Log4j2可以极大地提升系统的可维护性和稳定性。
通过以上步骤,Tomcat服务器将使用Log4j来管理catalina.out日志,这不但解决了日志文件过大和格式不统一的问题,而且提供了更丰富的日志管理功能,例如,可以利用Log4j强大的过滤、路由和格式化等功能,将日志管理得...