Log4j配置说明及样例

  一般的应用都会记录日志,Java圈里面用得最多就属log4j了,比较规范一点就是使用log4j.xml进行配置Log输出。这里就比较有疑问,多数情况是使用log4j.properties文件呐,前面也说了,规范一点就用log4j.xml进行配置,他们之间究竟有哪些区别呢,在百度知道里面有人这么回答,个人觉得还是有点道理的,广大博友可以自由备注。

  • 区别不大,只是在项目中配置的文件形式不一样。功能上没区别。 推荐用xml 方式。
  • 有web 项目中log4.properties不能使用Filter拦截日志级别,而log4j.xml可以,这点感觉log4j.xml要强大些
  • log4j.xml插入数据库的时候sql写在layout属性的ConversionPattern参数中,而log4.properties则有单独的sql属性接受配置文件中的sql语句

  虽然没有人点赞,但是有点道理哦。有这么一个场景:某一个模块中,我想把很重要的业务日志分离出来,保存在单独的一个文件中,不和其他普通的日志打在一起,后续用来做统计也比较方便(我厂大部分应用都是将日志统统地打印在一起,然后通过一个日志收集平台收集到MQ、HDFS中去做统计分析,然后统计分析的时候又要对这些日志做过滤只关心特殊的业务日志,个人认为这样很不好,不仅给后续统计分析带来复杂度,同时也给浪费大量收集平台的网络、IO等资源。)这里给出一个log4j.xml的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss}] %t %5p %c{2}: %m%n"/>
        </layout>
    </appender>

    <!--自定义appender-->
    <appender name="logmodel1" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logs/model1.log"/>  <!--日志路径-->
        <param name="Append" value="false"/> <!--是否追加-->
        <param name="MaxBackupIndex" value="3"/>        <!--最大roll的文件数-->
        <param name="MaxFileSize" value="10240"/> <!--文件size上限-->
        <layout class="org.apache.log4j.PatternLayout">          <!--日志输出格式-->
            <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss}] %5p %c: %m%n"/>
        </layout>
    </appender>

    <!--自定义logger,additivity: 是否遵循缺省的继承机制-->
    <logger name="model1" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="logmodel1"/>
    </logger>
    <root>
        <level value="INFO"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</log4j:configuration>

简单的模块样例代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Log4JTest {
    /**
     * root logger
     */
    private static final Logger LOG = LoggerFactory.getLogger(Log4JTest.class);

    /**
     * 自定义model1 logger
     */
    private static final Logger MODEL_LOG1 = LoggerFactory.getLogger("model1");

    public static void printLog(int i) {
        LOG.info("log something....." + i);
    }

    public static void printModelLog1(int i) {
        MODEL_LOG1.info("log info model1 something....." + i);
        MODEL_LOG1.debug("log debug model1 something....." + i);
    }

    public static void main(String[] args) throws InterruptedException {
        for (int i=10; i < 20; i++) {
            printLog(i);
            printModelLog1(i);
            Thread.sleep(1000);
        }
    }

}

  然后,普通的日志就直接输出在Console上了,比较核心的printModelLog1中通过MODEL_LOG1将日志输出到logs/model1.log文件中。具体log4j支持哪些appender以及ConversionPattern网上一搜一大把,不再赘述。

Log4j配置说明及样例

时间: 2024-08-10 17:19:48

Log4j配置说明及样例的相关文章

Eureka 的 Application Service client的注冊以及执行演示样例

Eureka 服务器架起来了(关于架设步骤參考博客<Linux 下 Eureka 服务器的部署>),如今怎样把我们要负载均衡的服务器(也就是从 Application Client 接收请求并返回一个响应的 Application Service)注冊到 Eureka?本文以一个演示样例介绍 Eureka Application Service 客户端的 Eureka 生命周期(包含启动时的注冊.侍服演示样例.关闭时的取消注冊)情况.相信读完本文之后,读者能够对 Eureka 的 Applic

jbpm入门样例

1.      jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 參考 http://www.jboss.com/products/jbpm 2.      jBPM和myeclipse的冲突 当eclipse安装了myeclipse和jBPM时候,可能有冲突,详细表如今jBPM的流程设计器不能在eclipse中使用. 3.      Hibernate连接mysql数据库的一般參数 以下的配置參数,依据

Eureka 的 Application Client client的执行演示样例

上篇以一个 demo 演示样例介绍了 Eureka 的 Application Service 客户端角色.今天我们继续了解 Eureka 的 Application Client 客户端,以一个简单的交互演示样例,介绍 Application Client 是怎样使用 Eureka 获取 Application Service 实例并发送请求的.        上篇<Eureka 的 Application Service 客户端的注冊以及执行演示样例>使用了一个 Socket 服务做为 d

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

ADF Faces导出Excel文件【附样例工程】

本文提供一个基于ADF Face组件开发样例工程,工程的实现过程分为3个部分以应对Excel导出开发中常见的处理. 1.空模版文件下载:将Excel文件视为普通文件提供下载操作. 2.数据文件输出,将数据内容输出为Excel文件,目标文件尽在服务端内存中存在,这种方式需要对Excel文件的内容处理,需要引入响应的类库. 3.模版文件填充数据后下载,基于服务端的物理文件为模板,将业务数据填入约定位置后提供下载,在实现方面需要为工作簿对象指定源文件输入流,并完成后续内容处理. 实现的基本思路,由AD

使用GPC分解多边形样例(Generic Polygon Clipper)

使用GPC分解多边形 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源) GPC: Generic Polygon Clipper GPC支持分解多边形.多边形求差集.交集,异或.并集 GPC_DIFF,                         /* Difference                        */ GPC_INT,                          /* Intersection    

Apache Tomcat样例目录session操纵漏洞

0x00   背景 前段时间扫到的漏洞,研究了下,感觉挺有意思的,发出来和大家分享下,有啥不对的地方还请各位拍砖指正. Apache Tomcat默认安装包含"/examples"目录,里面存着众多的样例,其中session样例(/examples/servlets/servlet/SessionExample)允许用户对session进行操纵.因为session是全局通用的,所以用户可以通过操纵session获取管理员权限. 案例:http://www.wooyun.org/bugs

最大熵算法及简单样例

近期在学模式识别,正在看Introduction to Pattern Recognition这本书,挺不错的一本书.好.以下和大家一起来学习最大熵算法. 首先,最大熵算法是干什么的呢?通常是用来预计一个分布,至于把分布预计出来之后用来干什么,那要视详细问题而定. 那这里的"熵"是什么意思呢?它是指信息熵,一个分布的均匀程度能够用熵的大小来衡量.熵越大,就越均匀.而最大熵就是要求在满足特定约束下,分布是什么样的时候.熵最大.也就是越均匀越好. 为什么在满足特定约束下越均匀越好?由于你已

LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

二次联通门 : LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 /* LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 很显然 贪心方程哦不 dp方程为 f[i][j]=f[i-1][j-k*k] 但是这样的话复杂度就是O(N ^ 5) 那么就用bitset优化一下 就ok了 */ #include <iostream> #include <cstdio> #include <bitset> void