在java mvc框架开发过程中,我们经常的将代码分为类似controller(控制层)、service(业务层)、rpc(远程接口调用层)、dao(数据层)等层级,如果将所有层级的日志全部都打到一个文件,一个是导致单个日志文件过大,另外不方便查看,所以下面考虑用log4j2根据不同层级生成对应的log文件:

1. maven配置

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.10.0</version>
</dependency>

2. log4j2配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<!-- 文件输出格式 -->
<Property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [LOGID:%X{logId}] [%thread] %C#%M [%L] -| %msg%n</Property>
<Property name="filePath">/export/Logs/Domains/myapp</Property>
</Properties> <Appenders>
<Console name="console" target="system_out">
<PatternLayout pattern="${pattern}" />
</Console>
<RollingRandomAccessFile name="rpcFile" fileName="${filePath}/rpc.log" filePattern="${filePath}/rpc-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingRandomAccessFile> <RollingRandomAccessFile name="serviceFile" fileName="${filePath}/service.log" filePattern="${filePath}/service-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="controllerFile" fileName="${filePath}/controller.log" filePattern="${filePath}/controller-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingRandomAccessFile> </Appenders> <Loggers>
<!--过滤信息-->
<logger name="org.springframework" level="WARN"></logger>
<logger name="RPC" level="INFO" >
<AppenderRef ref="rpcFile" />
</logger>
<logger name="SERVICE" level="INFO" >
<AppenderRef ref="serviceFile" />
</logger>
<logger name="CONTROLLER" level="INFO" >
<AppenderRef ref="controllerFile" />
</logger>
<Root level="INFO">
<AppenderRef ref="console" />
<AppenderRef ref="exceptionFile" />
</Root>
</Loggers> </Configuration>

3. 输出日志工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class LogUtil { /**
* RPC层日志记录
*/
public static final Logger RPC = LoggerFactory.getLogger("RPC"); /**
* Service业务层日志记录
*/
public static final Logger SERVICE = LoggerFactory.getLogger("SERVICE"); /**
* Controller业务层日志记录
*/
public static final Logger CONTROLLER = LoggerFactory.getLogger("CONTROLLER"); }

4. 输出日志

LogUtil.CONTROLLER.error("error message={}", e);
LogUtil.SERVICE.warn("warn message={}", msg);
....

log4j2分层输出日志的更多相关文章

  1. 记一次项目上线后Log4j2不输出日志的坑

        公司项目采用了Log4j2来输出日志,在开发环境和测试环境下均可以输出日志,但在生成环境就没有日志输出.开始毫无头绪,后来通过不断的排查,终于解决了这个问题.在此记录下该问题的解决过程,便于后 ...

  2. Spring Boot 使用 Log4j2 & Logback 输出日志到 EKL

    文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK ...

  3. 【转载】JsonLayout log4j2 json格式输出日志

    JsonLayout log4j2 json格式输出日志 如果日志输出时,想改变日志的输出形式为Json格式,可以在log4j2.xml中使用JsonLayout标签,使日志输出格式为Json格式. ...

  4. springboot集成log4j2 + logstash 异步输出日志

    一. spring boot 集成log4j2 1.maven引入jar包 <dependency> <groupId>org.springframework.boot< ...

  5. 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

    一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...

  6. Spring Boot(十)Logback和Log4j2集成与日志发展史

    一.简介 Java知名的日志有很多,比如:JUL.Log4j.JCL.SLF4J.Logback.Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看. 1.1 ...

  7. 3-log4j2之输出日志到文件

    一.添加maven依赖 <dependencies> <dependency> <groupId>org.apache.logging.log4j</grou ...

  8. Log4j,Log4j2,logback,slf4j日志学习

    日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条 ...

  9. 使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,log4j和logj2,idea控制台信息乱码(文末)

    说来惭愧,今天就写了个"hello world",了解了一下log4j的日志. 本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使用,log4j配置 ...

随机推荐

  1. css中设置background属性

    属性解释 background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个设置项: backgrou ...

  2. python高级(六)——用一等函数实现设计模式

    本文主要内容 经典的“策略”模式 python高级——目录 文中代码均放在github上:https://github.com/ampeeg/cnblogs/tree/master/python高级 ...

  3. 高阶篇:4.2.3)DFMEA现有设计:预防控制与探测控制

    本章目的:在现有设计中,明确预防控制与探测控制的定义和手段. 1.现有控制的填写部位: 2.现行设计控制(h)定义: 作为设计过程的一部分,现行设计控制是已经实施或承诺的活动,它将确保设计充分考虑设计 ...

  4. js计算日期相差天数

    日期不能直接相加减比较大小,需要转换一下然后计算最后转换成天,当然,你也可以根据同样类似的方法去转换成小时,或者月,年. function DateDiff(sDate1, sDate2) { //s ...

  5. win10安装ubuntu子系统配置

    # 更改apt源 cat > /etc/apt/sources.list <<'END' #阿里云 deb http://mirrors.aliyun.com/ubuntu/ tru ...

  6. Linux 用Kazam 录有声音的视频

    1.相关链接 https://launchpad.net/kazam 2.特性 录制视频的格式 : webm(vp8),mp4(h264),avi(raw),avi(huffyuv),avi(loss ...

  7. c++第二次作业

    1.函数重载编程练习编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型数据,调用测试. #include<iostream> ...

  8. 页面多个 swiper 互补冲突

    方法一:精简版 $(".swiper-container").each(function(){ $(this).swiper({ loop: true, initialSlide ...

  9. cmake 简学

    https://www.cnblogs.com/cv-pr/p/6206921.html

  10. 卸载Windows,安装纯Linux

    操作步骤 下载安装一键GHOST优盘版 参考帮助文档,安装U盘启动 重启电脑,F12进入模式选择界面,选择USB device 选择DOS 工具 进入Disk Genius 删除掉除主分区(0)外的其 ...