一般的应用都会记录日志,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配置说明及样例的更多相关文章

  1. jbpm入门样例

    1.      jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储.    參考 http://www.jbos ...

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

            上篇以一个 demo 演示样例介绍了 Eureka 的 Application Service 客户端角色.今天我们继续了解 Eureka 的 Application Client 客 ...

  3. SNF开发平台WinForm-审核流使用方法样例

    一.效果如下: 二.如何实现 1.程序的数据表设计规范,参考<09.SNF-C#编程规范V1.5.docx>文件. 2.程序操作程序 2.1.在程序页面拖拽控件 2.2.程序的Load事件 ...

  4. Kafka在Linux上安装部署及样例测试

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

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

            Eureka 服务器架起来了(关于架设步骤參考博客<Linux 下 Eureka 服务器的部署>),如今怎样把我们要负载均衡的服务器(也就是从 Application Cl ...

  6. MyBatis对数据库的增删改查操作,简单演示样例

    之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...

  7. JAVA各种OOM代码样例及解决方法

    周末了,觉得我还有很多作业没有写,针对目前大家对OOM的类型不太熟悉,那么我们来总结一下各种OOM出现的情况以及解决方法. 我们把各种OOM的情况列出来,然后逐一进行代码编写复现和提供解决方法. 1. ...

  8. 2020JAVA最新应对各种OOM代码样例及解决办法

    引言 作者:黄青石 链接:https://www.cnblogs.com/huangqingshi/p/13336648.html?utm_source=tuicool&utm_medium= ...

  9. ShardingSphere 知识库更新 | 官方样例集助你快速上手

    Apache ShardingSphere 作为 Apache 顶级项目,是数据库领域最受欢迎的开源项目之一.经过 5 年多的发展,ShardingSphere 已获得超 14K Stars 的关注, ...

随机推荐

  1. [游戏模版16] Win32 飞机射击 敌人追踪

    >_<:AI introduction. >_<:According the plane position (nowX,nowY) relative to birds' pos ...

  2. Installing SCM-Manager

    With SCM-Manager, people can share and manage Git, Mercurial and Subversion repositories over http e ...

  3. 通过Greasemonkey实现网页图片自动点击

    昨天受一个朋友所托,实现了一个在特定网页自动点击某超链接图片实现网页跳转功能的JavaScript脚本. 工具就是Firefox的Greasemonkey扩展插件.代码如下: // ==UserScr ...

  4. NodeJS系列~目录

    回到占占推荐博客索引 Node.js官网对它的阐述 Node.js is a platform built on Chrome's JavaScript runtime for easily buil ...

  5. iOS-网络请求-AFN升级至AFN3.0

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...

  6. SpringCloud+Consul 服务注册与服务发现

    SpringCloud+Consul 服务注册与服务发现 1. 服务注册: 在Spring.factories有一段: # Discovery Client Configuration org.spr ...

  7. Html+css 练习写页面发现的错误及解决办法。

    最近开始模仿写一些静态页面,今天模仿的是中华咨询网.写了一个简单的js(功能:当鼠标hover一级菜单的时候,设置二级菜单为显示,当鼠标hover二级菜单的选项时候,二级菜单不收回.当鼠标移出菜单一级 ...

  8. android: SQLite删除数据

    删除数据对你来说应该就更简单了,因为它所需要用到的知识点你全部已经学过了. SQLiteDatabase 中提供了一个 delete()方法专门用于删除数据,这个方法接收三个参数,第一 个参数仍然是表 ...

  9. 为PHP函数执行设置超时

    如何防止一个函数执行时间过长呢?在PHP里可以用pcntl时钟信号+异常来实现. 代码如下: declare(ticks = 1); function a(){ sleep(10); echo &qu ...

  10. Access to the path '20141211142713.gif' is denied.

    给network service加上读写权限即可