## 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页面查看