软件开发和维护过程中,日志是必不可少的工具,对于一个10万行规模的产品,要分析它的某一部分,最简单的方法是将log4j配置文件的rootLogger的输出级别设置为debug,但这样将使产品的所有部分的debug信息都输出,一方面会对产品性能产生巨大影响,另一方面所关心部分的debug信息会淹没在其他debug日志里,比较好的解决方法是 将这一部分的debug日志单独输出到一个新的日志文件里进行分析 ,下面 以指令平台为例说明实现方法。原始的log4j.properties文件如下:

log4j.rootLogger=INFO,stdout,R,errorlogger

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%p] [%d] [%c - %L] - [%m]%n

log4j.appender.stdout.Threshold=INFO

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=[%p] [%d] [%c - %L] - [%m]%n

log4j.appender.R.Threshold=INFO

log4j.appender.R.File=../log/godu.log

log4j.appender.R.MaxFileSize=20MB

log4j.appender.R.MaxBackupIndex=5

log4j.appender.errorlogger=org.apache.log4j.RollingFileAppender

log4j.appender.errorlogger.layout=org.apache.log4j.PatternLayout

log4j.appender.errorlogger.layout.ConversionPattern=[%p] [%d] [%c] - [%m]%n

log4j.appender.errorlogger.Threshold=ERROR

log4j.appender.errorlogger.File=../log/error.log

log4j.appender.errorlogger.MaxFileSize=20MB

log4j.appender.errorlogger.MaxBackupIndex=5

可以看到这里定义了3个rootLogger(默认输出级别是INFO):stdout向屏幕输出,R记录普通信息(指向godu.log,输出级别为INFO),errorlogger指向error.log,用来记录错误日志(ERROR及以上级别的日志)。现在我们要分析鉴权部分的工作过程,鉴权类都在com.boco.godu.framework.auth包里,要将这个包下所有类的debug信息输出到auth.log里。实现方法是在配置文件中增加一个专门处理auth包的logger:

log4j.logger.com.boco.godu.framework.auth=DEBUG,authDebuger

log4j.additivity.com.boco.godu.framework.auth=false

log4j.appender.authDebuger=org.apache.log4j.RollingFileAppender

log4j.appender.authDebuger.File=../log/auth.log

log4j.appender.authDebuger.Append=false

log4j.appender.authDebuger.MaxFileSize=2MB

log4j.appender.authDebuger.MaxBackupIndex=10

log4j.appender.authDebuger.layout=org.apache.log4j.PatternLayout

log4j.appender.authDebuger.layout.ConversionPattern=%d{MM-dd HH:mm:ss,SSS} %t %c,%L %p - %m%n

所以, 包一级定制logger的方法是 :

log4j.logger.=OUTPUT_LEVEL, logger_name

此logger的appender, layout的定义方法与rootLogger一样。上面第二行的作用是 避免详细日志写入rootLogger日志 ,否则新产生的大量debug日志会将之前已有的godu.log(以及godu.log.1等)冲掉,在现场环境下尤其要注意。它的一般形式是:

log4j.additivity.=false

这样就保证了auth包的debug日志不写入godu.log,additivity的默认值是true,所以如果不定义additivity,默认debug日志分别写入godu.log和auth.log中。实验发现指定rootLogger的输出级别(log4j.appender.R.Threshold=INFO)也可以避免debug日志写入godu.log里,但定义additivity更明确,是更好的方法。

除了用来输出详细日志, 包一级定制还有一个用处:屏蔽输出 。如果不需要某些包的日志,只要将它的输出级别调高就可以了。例如我们不想看到mina包的info日志,只有mina报错才写日志,可以做如下处理:

log4j.logger.org.apache.mina=WARN

在包一级定制log4j日志输出的更多相关文章

  1. log4j日志输出级别变更

    1.   现阶段log4j日志输出配置 示例:基础服务日志配置 #DEBUG < INFO < WARN < ERROR < FATAL\u65E5\u5FD7\u7684\u ...

  2. web项目Log4j日志输出路径配置问题

    问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...

  3. log4j日志输出使用教程

    Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...

  4. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

    使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用. 有些时 ...

  5. log4j日志输出框架

    什么是log4j框架呢? log4j是一个日志输出框架,用于输出日志的.比如MyBatis的日志就是通过log4j输出的,主流框架都是log4j输出的,Spring框架 也可以通过log4j输出日志! ...

  6. log4j日志输出到日志文件中和控制台中 +log4j配置详解

    1.引入log4j的jar包 https://mvnrepository.com/,可以找到log4j的jar和依赖. 2.创建log4j.properties,并配置log4j #设置日志的级别 , ...

  7. log4j日志输出使用_1

    转自https://www.cnblogs.com/sky230/p/5759831.html Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优 ...

  8. log4j日志输出到文件的配置

    1.Maven的dependency 2.log4j.properties的配置 3.Junit的Test类 4.web.xml的配置(非必要) 5.spring的db.config的配置(非必要) ...

  9. Log4j 日志输出学习(Eclipse)

    学习网址1:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 一.快速入手 1.官网下载log4j压缩包,本地加压 2.Ec ...

随机推荐

  1. Centos 8 误删/boot文件夹下文件后的恢复

    一.环境 Centos8 二.过程 1.查看/boot底下文件 ls /boot 2.模拟误删/boot底下文件 rm -rf /boot/*ls /boot 3.reboot,无法正常启动 4.在v ...

  2. filebeat 提取获取massage字段 利用pipeline grok 7.12

    嘴巴会说(情商)比技术有时候更重要! 水平有限,希望你看完有所收获! 背景 1,filebeat直连Elasticsearch,需要对massage提取一些特定的字段. 2,如果你对数据需要处理的比较 ...

  3. kotlin gradle 生成jni头文件

    目录 问题 解决方法 使用方法 代码 gradle task位置截图 问题 最近在用kotlin写jni,但是生成头文件的时候遇到了些问题. 首先 javah 在java >= 1.9 就被取消 ...

  4. Centos中安装Node.Js

    NodeJs安装有好几种方式: 第一种: 最简单的是用yum命令,可惜我现在用的时候 发现 镜像中没有nodejs:所以这种方式放弃: 第二种:去官网下载源码,然后自己编译:编译过程中可能会出现问题, ...

  5. SpringMVC(12)完结篇 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

    到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProj ...

  6. Android常用开源库(转)

    一 .基本控件 TextView HTextView 一款支持TextView文字动画效果的Android组件库. ScrollNumber 滚动数字控件 ticker 滚动数字控件 ReadMore ...

  7. 「AGC035C」 Skolem XOR Tree

    「AGC035C」 Skolem XOR Tree 感觉有那么一点点上道了? 首先对于一个 \(n\),若 \(n\equiv 3 \pmod 4\),我们很快能够构造出一个合法解如 \(n,n-1, ...

  8. Java基础00-异常25

    1. 异常 异常 1.1 异常概述 1.2 JVM的默认处理方案 有一行代码报错,下面的代码就不会执行. 1.3 异常处理 如果程序出现了异常,需要我们自己来处理,因为在实际的开发中,不能因为一处的报 ...

  9. MySQL主从复制的简单搭建

    @ 目录 1.MySQL一主一从的简单搭建 1.1.主从复制简介 1.2.MySQL主从复制简介 1.3.主从复制的架构 1.4.前期准备 1.5.主要配置实现 1.5.1.测试环境 1.5.2.配置 ...

  10. SpringBoot总结之属性配置

    一.SpringBoot简介 SpringBoot是spring团队提供的全新框架,主要目的是抛弃传统Spring应用繁琐的配置,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...