通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中。那么我们log4j为我们提供了这种功能,以下我们来一步一步看是怎么做的。这里以property的配置方式写。xml方式类似,想了解的,能够看官方文档。

这里測试的项目包结构例如以下:

log4j 主要由三部分组成:Loggers, Appenders 和Layouts,(appender 能够理解为输出的目的地)

咱们的log4j.properties或log4j.xml 里能够配置多个logger,

每一个logger 能够相应多个Appender,而appender和layout是一一相应的。

以下看最简单的配置,我们配置系统rootLogger,例如以下:

当中:
1、log4j.rootLogger 这个的配置三模式为:log4j.rootLogger=level,appender1,appender2,...
level为日志等级。关系如:DEBUG < INFO < WARN < ERROR < FATAL,等级越小能够输出比自己大的日志,如设置为debug,能够输出warn,error,等的日志。
而紧跟在后面的是appender列表:appender1,appender2,...
2、log4j.appender.A_console=org.apache.log4j.ConsoleAppender 指定相应的appender类,这是输出到控制台。
3、log4j.appender.A_console.layout=org.apache.log4j.PatternLayout 。指定layout类,
4、log4j.appender.A_console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 输出格式化。详细怎么使用能够查询PatternLayout 这个api。
我们用一个main方法输出来看看日志打印效果
 
配置多个appener的情况
  每一个logger能够相应多个appender,例如以下配置:
这样。当我们远行App时,日志会办出到控制台和mylog.log日志文件,这是就不再贴出来了。
配置多个logger 情况
  当我们须要对一些重要的日志进行抽取时,或系统中比較独立的模块,如专门与外部系统对接的接口。这时我们就能够配置多个logger,而实现日志分柝。便于我们的日常维护工作。

我们以下在原来的基础上再添加两个logger ,分别为:“com.pt.test” 和“com.pt.test.intf”,命名都是用包名来定义的,看看具体的配置吧:

我们注意到:新添加的两个logger 配置为:
log4j.logger.com.pt.test=debug,A_file2   
日志输出到:D:/test/logfile2.log
log4j.logger.com.pt.test.intf=debug,A_file3
日志输出到:D:/test/logfile3.log
我们看看三个文件的日志输出内容:
logfile1.log
logfile2.log
logfile3.log
这时我们会发现,filelog1,filelog2,filelog3都有打印了日志内容,细心的朋友应该会发现,filelog1里包括了filelog2里的全部内容,默认情况下,子Logger会的日志会向全部父级的appender输出,假设我们不想要这种输出那么我们能够把相应的Looger的additivity属性设置为false就能够了,如:把第17行凝视打开log4j.additivity.com.pt.test=false
这样,rootLogger就不会再有Logger "com.pt.test" 及其子包里的日志了。
 滚动生成日志文件的两种模式:
 1、使用 RollingFileAppender 。这样的模式为以大小为基准生成日志文件,配置maxFileSize来限定每一个文件大小,当超出指定大小,系统会自己主动生成下一个文件,
如以下面所看到的的appender:
2、使用DailyRollingFileAppender ,这样的模式是按时间来分割文件。能够细每种生成一个文件如:
log4j.appender.A_r_date.datePattern='.'yyyy-MM-dd-HH-mm'.log' 表示每分钟就会生成一个日志文件如:
rollFiledate.log.2014-07-12-14-09.log  rollFiledate.log.2014-07-12-14-10.log
假设想配置每天一个日志文件则能够:log4j.appender.A_r_date.datePattern='.'yyyy-MM-dd'.log'
web 项目中使用log4j
我把仅仅要把写好的log4j.properties 放到src文件夹下就能够了。


 

log4j配置输出到多个日志文件的更多相关文章

  1. log4j配置输出到多个日志文件(转)

    參考资料:http://logging.apache.org/log4j/1.2/manual.html 通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那 ...

  2. Log4j配置的经典总结,打印日志文件,日志存库

        一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...

  3. log4j输出多个自定义日志文件,动态配置路径

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  4. log4j每天,每小时产生一日志文件

    log4j每天,每小时产生一日志文件 2016年08月05日 14:14:33 阅读数:6254 一.之前的文章中有log4j的相关配置以及属性的介绍,下面我们先把配置列出来:   log4j.roo ...

  5. log4j配置输出日志文件

    在测试程序时,有时候运行一次可能需要很久,把日志文件保存下来是很有必要的,本文给出了scala程序输出日志文件的方式,同时使用本人的另一篇博客中介绍的将log4j.properties放到程序jar包 ...

  6. log4j分离日志输出 自定义过滤 自定义日志文件

    普通的log4j.properties 定义: ### set log levels ### log4j.rootLogger = debug,D,E ## Disable other log log ...

  7. log4j 输出原始数据到指定日志文件

    项目中需要将上传的数据输出到指定的log文件,之前对log4j缺少深入认识,普遍将整个应用的日志到输出到一个文件. 在经理的帮助下,业务数据可以直接输出到指定的log文件,现将配置及使用流程整理一下. ...

  8. log4j输出多个自定义日志文件(转)

    如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢? 先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志: ...

  9. log4j配置参数详解——按日志文件大小、日期切分日志文件

    项目中尽管对log4j有基本的配置,例如按天生成日志文件以作区分,但如果系统日志文件过大,则就需要考虑以更小的单位切分或者其他切分方式.下面就总结一下log4j常用的配置参数以及切分日志的不同方式. ...

随机推荐

  1. STM32应用实例十:简析STM32 I2C通讯死锁问题

    I2C接口是一种使用非常普遍的MCU与外部设备的接口方式,在STM32中也集成了I2C接口,我们也常常使用它来与外围的传感器等设备通讯. 最近在我们使用STM32F1VET6读取压力和温湿度传感器数据 ...

  2. vue+element之多表单验证

    方法一:利用promise var p1=new Promise(function(resolve, reject) { this.$refs[form1].validate((valid) => ...

  3. js获取iframe中的元素

    var obj=document.getElementById("iframe的name").contentWindow; var ifmObj=obj.document.getE ...

  4. python接口自动化测试二十七:加密与解密MD5、base64

    # MD5加密 # 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作 import hashlib def MD5(str): # 创建md5对象 hl ...

  5. 搬家通知博文地址(将博客搬到CSDN)

    (为了确认是您本人在申请搬家,请在原博客发表一 篇标题为<将博客搬至CSDN>的文章,并将文章地址填写在上方的"搬家通知博文地址"中.)

  6. C#编程语法积累(二)

    9.Lambda表达式 [1]Lambda表达式缩写推演,如下图: [2]Lambda语句:=>右边有一个语句块(大括号"{}"):Lambda表达式:=>右边只有一个 ...

  7. git - 移除文件以及取消对文件的跟踪

    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交.可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟 ...

  8. linux SSH免密码登录远程服务器

    背景:无密码登录,所谓的无密码登录其实是指通过证书认证的方式登录,使用一种‘公私钥’认证的方式来进行ssh登录 在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加 ...

  9. macOS下通过docker在局域网成功访问mysql5.6数据库

    1.获取mysql镜像 docker pull mysql:5.6 注意:此处之所以获取mysql5.6是因为mysql5.7在centos7中启动可能会报错, 2.查看镜像列表 docker ima ...

  10. Android 7.0 PopupWindow 又引入新的问题,Google工程师也不够仔细么

    Android7.0 PopupWindow的兼容问题   Android7.0 中对 PopupWindow 这个常用的控件又做了一些改动,修复了以前遗留的一些问题的同时貌似又引入了一些问题,本文通 ...