## CAT日志使用介绍 [cat-github](https://github.com/dianping/cat) ### 配置环境 1. 加载CAT配置 `在resource目录下创建文件夹META-INF` 然后创建一个`app.properties`文件里面定义`app.name=cat-demo`,后面是应用的名称 如果是SpringBoot可以在yml配置中加入 ```yml app.name: 项目名 # 针对CAT各个环境的项目名标识 ``` 2. 加载配置 [xml] ```xml com.elab.log elab-log 1.0 ``` 2.1 spring配置 ```xml ``` 2.1 加载配置[configuration] AOP配置 : Dao层 : CatDaoAscept Service层 : CatAspect 应用中加入: ```java import com.elab.log.asepct.CatDaoAscept; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; /** * dao层AOP拦截器定义 * * @author Liuhx * @create 2018-06-14 11:28 * @email liuhx@elab-plus.com **/ @Aspect @EnableAspectJAutoProxy @Configuration public class DaoAspectBean { @Bean public CatDaoAscept getDaoAspect() { CatDaoAscept daoAspect = new CatDaoAscept(); return daoAspect; } @Around(value = "execution(* com.elab.marketing.auth.dao..*(..))") public Object around(ProceedingJoinPoint pjp) throws Throwable { return getDaoAspect().around(pjp); } } ``` 2.2 log4j配置 ```tex log4j.rootLogger=info, Console ,cat ## 控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n ## 这个配置很重要,集成了CAT的日志 log4j.appender.cat=com.elab.log.log4j.CatExtLog log4j.appender.cat.Threshold = INFO log4j.appender.cat.layout=org.apache.log4j.PatternLayout log4j.appender.cat.layout.ConversionPattern=%p: [%d{yy/MM/dd HH:mm:ss}][%C-%M] -%m%n ## sql语句 log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG ## 包下面的类的打印级别 log4j.logger.org=ERROR log4j.logger.org.springframework=ERROR log4j.logger.com.x.jdbc=DEBUG ``` 2.3 logback配置 ```xml ``` 3. 应用中植入CAT日志 ```java // 建议在方法上加入 controller、service //username 为作者名称 @ExceptionHandle(username = "liukx",ModuleName=TestServiceImpl.class) protected final Log logger = LogFactory.getLog(this.getClass()); // 下面两种日志会输出到Event模块下 // 打印info日志 logger.info("xxx"); // 打印debug日志 logger.info("ggg"); // 打印错误日志 => 错误日志会出现在Problem logger.error("lll"); ``` ## 远程消息串联 一旦出现跨进程、异步调用,则会丢失该部分消息。如何将他们进行串联起来? ```java // 1. 异步线程之前,在主线程构建一个上下文消息对象,然后将该消息对象传递到异步线程或者其他进程中去 Map msgContextMap = CatCrossProcess.getMsgContextMap(); // 2. 异步线程接受该消息 Map dataMap = request.getDataMap(); Transaction t = CatCrossProcess.buildCrossMsg("privateQueue", dmlRequest.getTable(), dataMap); try { // 业务逻辑执行... t.setSuccessStatus(); } catch (Exception e) { t.setStatus(e); logger.error("消息队列发送失败"); } finally { t.complete(); } ``` 4. **需要注意** 1. 应用中需要根据自己的需求将对应的`logger.info`打印出来 2. **如何查看对应的CAT在当前的哪个环境下?** 1. 到你当前项目的文件夹的根目录下,比如我:E:\data\appdatas\cat\client.xml 2. 里面有对应的路径地址,表明当前项目的日志会上传到这个对应的CAT下面 3. **如何查看对应的错误?** 1. 登录CAT的web查询页面 2. 选择对应的项目 3. 点击Problem页面查看