log4j官网:http://logging.apache.org/log4j/2.x/manual/appenders.html

熟读官网内容的请忽视本文,记录英文小白的摸索过程

-------起因

新接手的项目原来是log4j的,线上日志登上去不是很好,分类的不够好,而且相对于xml的格式,properties的配置一直觉得不够直观

这次就想直接替换成log4j2了,而且简单了解了一下log4j2的性能相比较log4j和logback更加好

--------

用过logback的小伙伴们,对应log4j2的配置一定不会感到特别陌生,只是部分标签和格式不一样,大体的结构是一样的

<?xml version="1.0" encoding="GBK" ?>
<Configuration><!-- 输出日志到控制台  ConsoleAppender --><Properties><!--申明全局别名,下面可以直接使用--><Property name="APP_Name">myproject</Property><Property name="log.dir">/data/logs/apps/myproject</Property></Properties><!-- 输出日志到文件  每天一个文件 --><Appenders><!-- fileName:申明当前输出文件的目录和文件名 --><!-- filePattern:申明当使用归档策略的时候,生成的文件应该放到哪些目录下且名字格式如何 --><RollingFile name="FILE_INFO" fileName="${log.dir}/info-${APP_Name}.log"filePattern="${log.dir}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log"><!-- 当使用组合过滤器的时候,onMatch/onMismatch=NEUTRAL的时候 日志消息会继续往后面流转--><Filters><ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c - %m%n</Pattern></PatternLayout><!--归档策略,当满足归档条件,则自动归档。TimeBasedTriggeringPolicy基于时间条件归档,SizeBasedTriggeringPolicy基于文件大小归档--><Policies><TimeBasedTriggeringPolicy interval="1" modulate="false"/><SizeBasedTriggeringPolicy size="250 MB"/></Policies></RollingFile><RollingFile name="FILE_DEBUG" fileName="${log.dir}/debug-${APP_Name}.log"filePattern="${log.dir}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}-%i.log"><!-- 当使用组合过滤器的时候,onMatch/onMismatch=NEUTRAL的时候 日志消息会继续往后面流转--><Filters><ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/></Filters><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c - %m%n</Pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy interval="1" modulate="false"/><SizeBasedTriggeringPolicy size="250 MB"/></Policies></RollingFile><RollingFile name="FILE_ERROR" fileName="${log.dir}/error-${APP_Name}.log"filePattern="${log.dir}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}-%i.log"><!-- 当使用组合过滤器的时候,onMatch/onMismatch=NEUTRAL的时候 日志消息会继续往后面流转--><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c - %m%n</Pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy interval="1" modulate="false"/><SizeBasedTriggeringPolicy size="250 MB"/></Policies></RollingFile><RollingFile name="FILE_WARN" fileName="${log.dir}/warn-${APP_Name}.log"filePattern="${log.dir}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}-%i.log"><!-- 当使用组合过滤器的时候,onMatch/onMismatch=NEUTRAL的时候 日志消息会继续往后面流转--><Filters><ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/><ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/></Filters><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c - %m%n</Pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy interval="1" modulate="false"/><SizeBasedTriggeringPolicy size="250 MB"/></Policies></RollingFile><RollingFile name="MONITOR" fileName="${log.dir}/monitor-${APP_Name}.log"filePattern="${log.dir}/%d{yyyy-MM-dd}/monitor-%d{yyyy-MM-dd}-%i.log"><!-- 当使用组合过滤器的时候,onMatch/onMismatch=NEUTRAL的时候 日志消息会继续往后面流转--><Filters><ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/><ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/></Filters><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c - %m%n</Pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy interval="1" modulate="false"/><SizeBasedTriggeringPolicy size="250 MB"/></Policies></RollingFile></Appenders><!--控制某包下面的日志输出级别,只有大于等于这个级别才会输出--><Loggers><Logger name="com.ibatis" level="DEBUG"/><Logger name="java.sql" level="DEBUG"/><Logger name="org.springframework" level="WARN"/><Logger name="org.apache.velocity" level="WARN"/><Logger name="org.apache.http" level="WARN"/><Logger name="net.sf" level="WARN"/><Logger name="org.displaytag" level="ERROR"/><Logger name="org.apache.commons" level="WARN"/><Logger name="org.apache.struts" level="WARN"/><Logger name="RocketmqClient" level="ERROR"/><Logger name="httpclient.wire" level="ERROR"/><!--申明一个特殊的日志,输出到某个文件里面去--><Logger name="monitor" level="DEBUG" ><AppenderRef ref="MONITOR"/></Logger><Root level="DEBUG"><AppenderRef ref="FILE_INFO"/><AppenderRef ref="FILE_WARN"/><AppenderRef ref="FILE_ERROR"/><AppenderRef ref="FILE_DEBUG"/></Root></Loggers></Configuration>

web.xml的配置

 <context-param><param-name>log4jContextName</param-name><param-value>myproject</param-value></context-param><context-param><param-name>log4jConfiguration</param-name><param-value>classpath:log4j2.xml</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>

对于monitor log的申明是这样的

private static final Logger monitorLog = LoggerFactory.getLogger("monitor");

这样通过这个log记录的日志都会到monitor这个日志文件里面去了,还是很灵活的,这个功能logback也提供了。

--------Filters

这里着重说一下Filters

我这里是用的ThresholdFilter,因为之前还用过logback的xml配置,那边的level指定了DEBUG就输出DEBUG,而LOG4J2不太一样

http://logging.apache.org/log4j/2.x/manual/filters.html#ThresholdFilter

Threshold Filter Parameters这个里面对于level定义其实不够准确,可能也因为前文已经说到了,这里也只是简单的定义了一下。

重点在前文说明上:

This filter returns the onMatch result if the level in the LogEvent is the same or more specific than the configured level and the onMismatch value otherwise

过滤器会筛选 如果日志级别大于等于配置的级别的,则返回onMatch的值,否则返回OnMismath的值

所以满足级别要求的,也可以不输出,把onMatch配置成DENY就行。

说一下onMatch和onMishmatch的三个值:

Accept     通过 :输出日志并阻止日志往下个过滤器流转

Deny        拒绝  :不输出日志并阻止日志往下个过滤器流转

Neutral     中立  :不输出日志,日志往下个过滤器流转, 直到最后一个过滤器

因为过滤器的级别定义的特性,如果要配置一个只输出INFO级别日志的文件,过滤器如下:

<Filters><ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters>

--------Policy

着重说一下 TimeBasedTriggeringPolicy

interval,指定归档日志时间间隔,具体单位以日志的文件名最后一个单位为标准,比如  yyyy-MM-dd,则以天为单位

modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00,。。。

--------Appender

今天配好之后,error、warn、info、debug级别的日志输出都没有问题,但是原来catalina.out文件输出的内容只有启动时候的,之后具体运行时候的都没有记录了。

还是吃了没文化的亏,之前没有自己从头到尾的配置过日志。

跟手上其他的项目比较之后,发现有一个ConsoleAppender没有配置导致的,这个是输出控制台日志的,配置了这个之后catalina.out就会包含所有的日志了,但是需要注意catalina.out文件过大的问题

<Console name="STDOUT" ><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c - %m%n"/></Console>

--------附加相关网址

配置按照分钟归档 http://blog.csdn.net/zhang168/article/details/46814489

Log4j2简单配置相关推荐

  1. 为什么加上log4j2.version配置就可以更新log4j2的版本?

    最近log4j2的核弹级漏洞席卷了大部分互联网公司,升级版本成了这两周的核心任务.对于要升级到什么版本,最新版本2.16.0是最佳选择.那么如何快速升级,之前也给出了Spring Boot项目升级版本 ...

  2. Springboot使用Log4j2的配置详解

    Springboot使用Log4j2的配置 日志框架的对比和选择 一.依赖配置(pom文件) 二.log4j2.xml文件的配置 三.Log4j2.xml配置文件核心概念解析 1.全局Property ...

  3. springboot开启debug日志_SpringBoot日志快速上手简单配置

    默认配置 日志级别从低到高分为: TRACE < DEBUG < INFO < WARN < ERROR < FATAL. 如果设置为 INFO ,则低于 INFO 的信 ...

  4. SpringBoot整合Log4j2以及配置详解

    文章目录 标题SpringBoot整合Log4j2以及配置详解 1.加入依赖 2.在src.java.main.resources目录下创建log4j2.xml文件 log4j2.xml文件内容如下: ...

  5. log4j2 日志配置

    log4j2.properties 配置 由于最近有一些特殊的需求:异常日志邮件异步发送配置 等等需求.原有的简单配置不能满足现有需求,特做此笔记,留作备忘也同时希望帮助一部分人 如有错误欢迎留言指正 ...

  6. 简单配置nginx反向代理,实现跨域请求

    简单配置nginx去做反向代理,实现跨域请求 简单介绍nginx的nginx.conf最核心的配置,去做反向代理,实现跨域请求. 更多详细配置,参考nginx官方文档 先介绍几个nginx命令 打开n ...

  7. Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)

    Centos 6.5下一个SNMP简单配置(snmp protocol v3.监控宝) jom_ch@2014/7/25 1,安装 >yum -y install net-snmp net-sn ...

  8. virtualbox 创建桥接网络_VirtualBox桥接网络的简单配置,让虚拟机直接访问网络

    VirtualBox桥接网络的简单配置,让虚拟机直接访问网络 分类: Linux 2009-08-20 08:59 5071人阅读 评论(0) 收藏 举报 (1)最新的 VirtualBox 可以简单 ...

  9. Webpack4 学习笔记 - 01:webpack的安装和简单配置

    安装 webpack 新建一个Demo文件夹,执行初始化: npm init 在Demo文件夹里安装 webpack 和 webpack-cli : npm install webpack webpa ...

最新文章

  1. IPv6 auto config 原理详解之-----前缀公告
  2. 存储过程从入门到熟练(多个存储过程完整实例及调用方法)_AX
  3. 优秀!复旦直博生一作发15篇SCI,并担任12本SCI期刊审稿人
  4. 和在线视频会议服务器,什么是视频会议服务器端和客户端?
  5. poj 1847 Tram 最短路 dijkstra、floyed
  6. 华为高管涉嫌受贿已被带走调查
  7. pat1056. Mice and Rice (25)
  8. Mac声音太小?那你不能错过这款神器Boom 2
  9. 字节图标iconpark在vue3中的使用
  10. 03.整体管理+变更管理
  11. 西北工业大学电工学mooc第六章测试题及解析
  12. 机器学习之欠采样和过采样
  13. Jenkins 下载慢解决方法
  14. Python实现中英互译
  15. 无线量子通信/无线量子通讯,5G下一代物联网的创新研究
  16. 破解IntelliJ IDEA
  17. Java读取hdfs文件权限问题
  18. 面向对象与面向过程理解
  19. 记录一次实战GetShell
  20. 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) A)

热门文章

  1. 计算机使用安全标语,计算机保密安全标语
  2. 2021年安全员-C证免费试题及安全员-C证复审模拟考试
  3. android照片备份软件下载,加密相册备份app下载
  4. 小朋友必读:修身养德,治学立教
  5. php实现打字效果,JS实现的打字机效果示例代码
  6. 想注册域名,怎样查询有没有被注册?
  7. 【数据结构与算法】哈希算法的原理和应用详解!
  8. 【数字信号处理】Matlab做fft时点数N怎么选取
  9. php单例模式例子,PHP单例模式
  10. linux中文排序不按照拼音,按照人名的汉语拼音的顺序排序