(2) 在log4j.xml中如下配置:
<appender name="PROJECT" class="org.apache.log4j.FileAppender">
<param name="file" value="${myApp.root}/logs/mylog.log"/>
<param name="append" value="false"/>
<param name="encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
这样就可以实现日志输出目录的动态配置了!
如果配置的是配置文件,需要如下的配置:
log4j.appender.info.File=${myApp.root}/WEB-INF/logs/info.log
(3) 注意:要将log4j.xml或log4j.property放在WEB-INF目录下面,如果放在通常的classes下面的话会有一个问题,当Tomcat启动的时候,Log4j会到classes下面去找这个配置 文件,然后因为这时候还没有设置系统变量,那么就会报找不到对应文件的错误了!但其实这个错误是不会影响接下来的功能,就是为了避免出现这个异常将配置文件放到WEB-INF下面。
1.1.1 使用log4j将log写入mysql
在log4j 1.2.8 的api中JDBCAppender类的说明中有一段红字
WARNING: This version of JDBCAppender is very likely to be
completely replaced in the future. Moreoever, it does
not log exceptions.
1. 在mysql中创建库logdb
create database;
2. 在库logdb中创建表muglog,
create table muglog{
id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
logdate DATE,
logger VARCHAR(50),
priority VARCHAR(50),
message VARCHAR(255)
};
3. 修改log4j.properties
### 限制com.bob.digester(名:dig)才会log on JDBCAppender ###
log4j.logger.com.bob.digester=info, dig
log4j.appender.dig=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.dig.URL=jdbc:mysql://localhost/logdb
log4j.appender.dig.driver=com.mysql.jdbc.Driver
log4j.appender.dig.user=root
log4j.appender.dig.password=
log4j.appender.dig.sql=INSERT INTO MUGLOG (LOGDATE, LOGGER, PRIORITY, MESSAGE) VALUES ('%d', '%c', '%p', '%m')
log4j.appender.dig.layout=org.apache.log4j.PatternLayout
4. 注意,这里mysql的driver是mysql-connector-java-3.0.14-production-bin.jar里的com.mysql.jdbc.Driver
所以,把它放到classpath里, 如在Eclipse测试,需放到project的java build path的Libraries里
1. log4j的一个简单例子
把日志输出到MySQL数据库
Hello.java
import org.apache.log4j.*;
public class Hello {
static Logger logger = Logger.getLogger(Hello.class);
public static void main(String[] args) {
PropertyConfigurator.configure("log4j.properties");
logger.info("Entering Application");
for(int i = 1; i < 10; i++) {
logger.debug("" + i);
}
logger.info("Exit Application");
}
}
log4j.properties
log4j.rootLogger=DEBUG,DATABASE
log4j.addivity.org.apache=true
########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/JAVA002?characterEncoding=utf8
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=username
log4j.appender.DATABASE.password=123
log4j.appender.DATABASE.sql=INSERT INTO log4j(DATE, THREAD, LEVEL, CLASS, MESSAGES) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
四、log4j与Commons-logging的结合
1.1.1 Commons-logging简介
Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。
log4j与commons-logging两个包,都是记日志的,为什么要两个一起用呢? commons-logging是为"所有的Java日志实现"提供一个统一的接口,它自身的日志功能平常弱,而log4j功能非常强大全面,所以拿两者配合使用。
强调一点,“同时使用commons-logging和Log4j”,与“单独使用Log4j”相比,并不会带来更大的学习、配置和维护成本,反而更加简化了我们的工作。
1.1.2 Commons-logging工作原理
Commons-logging提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密耦合,很贴心的帮开发者自动选择适当的日志实现系统,它甚至不需要配置。
commons-logging工作原理:
1. 首先在classpath下寻找自己的配置文件commons-logging.properties中当前factory中名叫org.apache.commons.logging.Log配置属性的值,如果找到,则使用其中定义的Log实现类。
2. 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log对应的值,找到则使用其定义的Log实现类。
建立一个叫 :CATALINA_OPTS 的环境变量 给他的值 : - Dorg.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog - Dorg.apache
.commons.logging.simplelog.defaultlog = warn
|
3. 查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类则,使用相关的包装(wrapper)类(Log4JLogger)。
4. 使用JDK自身的日志实现类(JDK1.4以后才有日志实现类) ,使用相关的包装类(Jdk14Logger)。
5. 使用commons-logging自己提供的一个简单的日志实现类SimpleLog 。
org.apache.commons.logging.Log的具体实现有如下:
-org.apache.commons.logging.impl.Jdk14Logger //使用JDK1.4。
-org.apache.commons.logging.impl.Log4JLogger //使用Log4J。
-org.apache.commons.logging.impl.LogKitLogger //使用 avalon-Logkit。
-org.apache.commons.logging.impl.SimpleLog
common-logging自带日志实现类。它实现了Log接口,把日志消息都输出到系统错误流System.err 中。
-org.apache.commons.logging.impl.NoOpLog common-logging自带日志实现类。它实现了Log接口。 其输出日志的方法中不进行任何操作。
总之,commons-logging总是能找到一个日志实现类,并且尽可能找到一个"最合适"的日志实现类。
1、可以不需要配置文件。
2、自动判断有没有Log4j包,有则自动使用之。
3、最悲观的情况下也总能保证提供一个日志实现(SimpleLog)。
为了简化配置commons-logging,一般不使用commons-logging的配置文件,也不设置与commons-logging相关的系统环境变量,而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融合。如果不想用Log4j了怎么办?只需将classpath中的Log4j的Jar包删除即可。
1.1.3 使用JCL开发
因为Log4j的强大,同时开发者又不希望对Log4j的依赖性太强。所以目前比较流行的是Commons-logging和Log4j结合使用。
1. 部署日志器
下载commons-logging.jar和log4j.jar包,能后把它们放到工程的lib目录下,引入工程中。
2. 指定日志器
在属性文件common-logging.properties中设置实现接口的类。如下(这里设置Log4j为所使用的日志包):
#commons-logging.properties文件配置信息
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
#利用log4j为输出介质
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
#JDK5 Logger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
|
3.org.apache.commons.logging.Log接口中定义的方法,按严重性由高到低的顺序有:
log.fatal(Object message);
log.fatal(Object message, Throwable t);
log.error(Object message);
log.error(Object message, Throwable t);
log.warn(Object message);
log.warn(Object message, Throwable t);
log.info(Object message);
log.info(Object message, Throwable t);
log.debug(Object message);
log.debug(Object message, Throwable t);
log.trace(Object message);
log.trace(Object message, Throwable t);
|
除此以外,还提供下列方法以便代码保护。
log.isFatalEnabled();
log.isErrorEnabled();
log.isWarnEnabled();
log.isInfoEnabled();
log.isDebugEnabled();
log.isTraceEnabled();
|
4.信息级别
确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。
1)fatal非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。
2)error其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。
3)warn使用了不赞成使用的API、非常拙劣使用API, '几乎就是'错误, 其它运行时不合需要和不合预期的状态但还没必要称为 "错误"。期望这类信息能立即显示在状态控制台上。
4)info运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。
5)debug系统流程中的细节信息。期望这类信息仅被写入log文件中。
6)trace更加细节的信息。期望这类信息仅被写入log文件中。
通常情况下,记录器的级别不应低于info.也就是说,通常情况下debug的信息不应被写入log文件中。
分享到:
相关推荐
然后使用Logger.getLogger()方法获取日志记录器,而Log4j2需要import org.apache.logging.log4j.Level、org.apache.logging.log4j.LogManager和org.apache.logging.log4j.Logger,使用LogManager.getLogger()方法...
3. **Log4j的组件** - Logger:日志记录器,负责实际的日志记录工作,可以按照类名或自定义名称创建多个Logger。 - Appender:日志输出器,定义日志信息输出的目标和格式,如ConsoleAppender(控制台)、...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
- `log4j-1.2.14.jar`: 这是Log4j 1.2.14版本的jar包,包含了Log4j的全部类和方法,是使用Log4j进行日志记录的核心组件。 - `commons-logging-1.0.4.jar`: 这是Apache Commons Logging库,它是Java日志API的一个抽象...
3. **强大的异步日志功能**:Log4j2提供了基于LMAX Disruptor库的强大异步日志处理能力,显著提高了日志记录的性能。 4. **插件式架构**:Log4j2采用了插件式的软件架构,这使得框架易于扩展而无需修改其核心代码。...
Log4j2 结合 Slf4j 配置使用 Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将...
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...
Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...
### Log4j 使用详解 #### 一、Log4j简介 Log4j 是 Apache 的一个开源项目,通过使用 Log4j,开发者能够控制日志信息的输出等级及去向,从而更加灵活地处理日志信息。它具有强大的功能,简单的配置,并且能够支持...
Log4j、Log4j2和Fastjson的安全性问题在过去曾引起广泛关注,例如Log4j2的CVE-2021-44228(也被称为Log4Shell漏洞),这是一个远程代码执行漏洞,影响了许多使用Log4j2的系统。这个插件可能就是为了检测和利用这些...
Log4j和SLF4J(Simple Logging Facade for Java)是两个广泛使用的日志框架,它们各有优势并常被一起使用以提供更灵活的日志解决方案。本文将详细探讨如何通过SLF4J接口来使用Log4j进行日志记录,并展示一个测试代码...
### Log4j 使用实例详解 #### 一、Log4j简介 Log4j 是一个开源的日志记录框架,由 Apache 软件基金会提供。它允许开发者根据需求配置日志等级,并灵活选择日志信息的输出方式。Log4j 的核心组件包括 Logger、...
分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...
四、在 Maven 项目中引入 Log4j 依赖 在 Maven 项目中,需要引入 Log4j 依赖项,以便使用 Log4j。下面是一个基本的 Maven 依赖项配置: ``` <groupId>log4j <artifactId>log4j <version>1.2.16 ``` 这个配置...
### log4j使用详解 #### 一、log4j简介 Log4j是Apache的一个开源项目,用于实现日志功能,被广泛应用于各种基于Java的应用系统中。它提供了一个非常强大的框架来定制日志信息的生成方式,允许开发人员根据需要调整...
本文将详细介绍如何在Java中使用Log4j来记录日志,并将其写入数据库。 首先,我们需要了解Log4j的基本结构。一个简单的Log4j项目通常包含以下几个部分: 1. **配置文件**:Log4j的配置文件通常是`log4j.properties...
3. 配置更新后的log4j2,禁用可能导致问题的JNDI查找功能,增强系统安全。 4. 对系统进行全面的安全检查,确保没有遗留的漏洞或风险。 5. 实施持续的安全监控,以便及时发现并处理任何异常行为。 总的来说,log4j2...
使用这两个JAR文件时,需要确保在应用程序的类路径中同时包含它们,以便正确运行Log4j 2框架。配置Log4j通常通过一个XML或JSON格式的配置文件完成,例如`log4j2.xml`或`log4j2.json`,这个文件定义了日志的输出级别...
3. **导入使用**:在Java项目中使用Log4j非常简单,只需要将`log4j-2.17.1.jar`文件添加到项目的类路径(Classpath)中。对于Maven或Gradle项目,可以在依赖管理中添加相应的依赖条目。 4. **配置文件**:Log4j 的...