`

log4j使用整理材料(3)

阅读更多

(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.xmllog4j.property放在WEB-INF目录下面,如果放在通常的classes下面的话会有一个问题,当Tomcat启动的时候,Log4j会到classes下面去找这个配置 文件,然后因为这时候还没有设置系统变量,那么就会报找不到对应文件的错误了!但其实这个错误是不会影响接下来的功能,就是为了避免出现这个异常将配置文件放到WEB-INF下面。

1.1.1           使用log4jlog写入mysql

log4j 1.2.8 apiJDBCAppender类的说明中有一段红字
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.
注意,这里mysqldrivermysql-connector-java-3.0.14-production-bin.jar里的com.mysql.jdbc.Driver
  
所以,把它放到classpath, 如在Eclipse测试,需放到projectjava build pathLibraries

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')

四、log4jCommons-logging的结合

1.1.1           Commons-logging简介

Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4JLogKit的实现。

log4jcommons-logging两个包,都是记日志的,为什么要两个一起用呢? commons-logging是为"所有的Java日志实现"提供一个统一的接口,它自身的日志功能平常弱,log4j功能非常强大全面,所以拿两者配合使用。

强调一点,同时使用commons-loggingLog4j”,与单独使用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相关的系统环境变量,而只需将Log4jJar包放置到classpash中就可以了。这样就很简单地完成了commons-loggingLog4j的融合。如果不想用Log4j了怎么办?只需将classpath中的Log4jJar包删除即可。

1.1.3           使用JCL开发

因为Log4j的强大,同时开发者又不希望对Log4j的依赖性太强。所以目前比较流行的是Commons-loggingLog4j结合使用。

1. 部署日志器

下载commons-logging.jarlog4j.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

3org.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.信息级别

确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。

1fatal非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。

2error其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。

3warn使用了不赞成使用的API、非常拙劣使用API, '几乎就是'错误, 其它运行时不合需要和不合预期的状态但还没必要称为 "错误"。期望这类信息能立即显示在状态控制台上。

4info运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。

5debug系统流程中的细节信息。期望这类信息仅被写入log文件中。

6trace更加细节的信息。期望这类信息仅被写入log文件中。

  通常情况下,记录器的级别不应低于info.也就是说,通常情况下debug的信息不应被写入log文件中。

分享到:
评论

相关推荐

    log4j使用详解log4j使用详解

    log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解

    log4j使用教程(详解)

    log4j使用教程 log4j使用教程 log4j使用教程

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    log4j.jar各个版本

    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使用笔记

    1.该笔记中详细的介绍了log4j的作用和优势、具体地讲解了log4j的使用步骤和详细...3.该笔记从log4j的简介/入门开始介绍,到具体的使用实现都一一详细分析,是log4j入门和精通值得参考的笔记,希望给大家带来意外的帮助。

    log4j-core-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-...3. 上传新版本log4j-api-2.15.0.jar 4. 将解压后的文件重新打包 jar cvfM0 XXX.jar BOOT-INF META-INF org 5. 启动测试 java -jar XXX.jar

    如何使用Log4j如何使用Log4j

    此文件教你一步一步教你如何使用Log4j此文件教你一步一步教你如何使用Log4j此文件教你一步一步教你如何使用Log4j此文件教你一步一步教你如何使用Log4j此文件教你一步一步教你如何使用Log4j

    apache log4j使用大全

    apache log4j使用大全 log4j使用

    apache-log4j-2.17.0 核心jar包

    Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码,

    log4j-api-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api...3. 上传新版本log4j-api-2.15.0.jar 4. 将解压后的文件重新打包 jar cvfM0 XXX.jar BOOT-INF META-INF org 5. 启动测试 java -jar XXX.jar

    Log4j2简介及与Log4j效率对比

    描述Log4j2的配置详情及相对Log4j的优点,包括效率测试程序

    Log4j日志包

    log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...

    老生常谈Log4j和Log4j2的区别(推荐)

    下面小编就为大家带来老生常谈Log4j和Log4j2的区别(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Log4J使用完全手

    Log4J使用完全手Log4J使用完全手Log4J使用完全手Log4J使用完全手Log4J使用完全手Log4J使用完全手Log4J使用完全手Log4J使用完全手Log4J使用完全手

    log4j-to-slf4j-2.17.1-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...

    修复log4j漏洞log4j2下载最新log4j2.16.0下载 log4j-api-2.16.0.jar

    apache下载太慢,特搬到国内下载。修复log4j漏洞log4j2下载最新log4j2.16.0下载

    Log4j使用实例

    详细介绍Log4j使用实例

Global site tag (gtag.js) - Google Analytics