Log4j打印参数配置
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="INFO" monitorInterval="600">
<Properties>
<property name="ModuleName">zzz</property>
</Properties>
<Appenders>
<Console name="ConsoleAppender">
<PatternLayout pattern="|%d{yyyy-MM-dd HH:mm:ss.SSS}|%5p|%5t|%l|%m%n" />
</Console>
<RollingRandomAccessFile name="SystemAppender"
filename="/logs/CPCN/Payment/${ModuleName}/${ModuleName}.log"
filepattern="/logs/CPCN/Payment/${ModuleName}/$${date:yyyy-MM-dd}/${ModuleName}.log.%d{yyyy-MM-dd-HHmmss}-%i.log">
<PatternLayout pattern="|%d{yyyy-MM-ddHH:mm:ss.SSS}|%5p|%5t|%l|%m%n" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true"
interval="3600" />
<SizeBasedTriggeringPolicy size="64MB" />
</Policies>
<DefaultRolloverStrategy max="1000" />
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<AsyncLogger name="system" additivity="false" level="INFO"
includeLocation="true">
<AppenderRef ref="SystemAppender" />
</AsyncLogger>
<AsyncLogger name="console" additivity="false" level="INFO"
includeLocation="true">
<AppenderRef ref="SystemAppender" />
<AppenderRef ref="ConsoleAppender" />
</AsyncLogger>
<AsyncLogger name="dao" additivity="false" level="INFO"
includeLocation="true">
<AppenderRef ref="SystemAppender" />
</AsyncLogger>
<AsyncRoot level="INFO" includeLocation="true">
<AppenderRef ref="SystemAppender" />
</AsyncRoot>
</Loggers>
</Configuration>
日志级别
FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7
日志输出目的地
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
日志输出格式
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
打印参数
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
看个栗子
|%d{yyyy-MM-ddHH:mm:ss.SSS}|%5p|%5t|%l|%m%n
按照上面的套一下
时间|类型|线程名|事件发送位置| %m(真实的日志信息) %n (换行)
根据这个可以知道
public void warn(LogType logType, Object message) {
String msgFormatted = msgFormat(logType, message);
logger.warn(msgFormatted);
}
protected String msgFormat(LogType logType, Object message) {
StringBuilder sb = new StringBuilder();
LogContextVO logContext = LogContextHolder.getInstance().getLogContext();
sb.append(logContext.getTraceID());
sb.append("|").append(logContext.getTransferID());
sb.append("|").append(logContext.getLocalIP());
sb.append("|").append(logContext.getTraceIP());
sb.append("|").append(moduleID);
sb.append("|").append(logContext.getRootID());
sb.append("|").append(logType);
sb.append("|");
sb.append(message != null ? "|" + message.toString() + "|" : "");
return sb.toString();
}
message 增加一些内容
|traceID|tranceferID|localIP|TraceIp|moduleID|rootID|logType| | 日志描述|
|1805181822152053531749637|0.3.2.7.2|192.168.145.90:|192.168.145.90:|3511|20180518182215795295|SQL| |哈哈哈|
配置Junit jar包之后 采用Debug 方式运行
package test.payment;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.apache.logging.log4j.core.config.Configurator;
import org.junit.Test;
import cpcn.payment.tools.log.Loggerx;
/**
* 类说明
*
* <pre>
* Modify Information:
* Author Date Description
* ============ =========== ============================
* DELL 2019年4月25日 Create this file
* </pre>
*
*/
public class LogTest {
@Test
public void testLog() throws InterruptedException {
// log4j
String log4jConfigFile = "./config" + File.separatorChar + "log4j2.xml";
System.out.println(log4jConfigFile);
Configurator.initialize(null, log4jConfigFile);
Loggerx LOGGER = Loggerx.getLogger("console");
// Logger LOGGER = Logger.getLogger("system");
Map<String, String> map = new HashMap<>(4);
map.put("channelItemKey", "channelItemKey");
map.put("responseMessage", "responseMessage");
map.put("taskId", "100101");
map.put("startTime", "201908151612");
map.put("finishTime", "201908151612");
map.put("receiptTime", "20190823185055999");
map.put("rceiptStatus", "reject");
LOGGER.newLog().keyword(map).add("通道费率匹配失败").error();
LOGGER.newLog().keyword(map).add("rceiptStatus 测试 ").info();
LOGGER.newLog().keyword(map).add("rceiptStatus 测试 ").warn();
}
}