以下是一個正確的log4j 配置java
log4j.rootLogger = ERROR,dailyRolling log4j.appender.dailyRolling=org.apache.log4j.DailyRollingFileAppender log4j.appender.dailyRolling.Encoding=UTF-8 log4j.appender.dailyRolling.File=d:/logs/weds-pay log4j.appender.dailyRolling.layout=org.apache.log4j.PatternLayout log4j.appender.dailyRolling.layout.ConversionPattern=%d %p [%c.%M(%L)] - %m%n log4j.appender.file.DatePattern=_yyyy-MM-dd'.log' log4j.appender.file.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n #log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender #log4j.appender.CONSOLE.Encoding=UTF-8 #log4j.appender.CONSOLE.Target=System.out #log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.elkLog=INFO,elkLog log4j.additivity.elkLog=false #false爲不傳遞,也就說只輸出到redis,不輸出到本地磁盤了, true的話是傳遞,默認爲true,寫redis還寫本地磁盤 log4j.appender.elkLog=com.weds.framework.utils.elk.ELKApiAppender log4j.appender.elkLog.writeLogKey=weds-pay-api log4j.appender.elkLog.layout=org.apache.log4j.PatternLayout log4j.appender.elkLog.layout.ConversionPattern=%d %p [%c] - %m%n #log4j.logger.org.springframework=WARN #log4j.logger.org.apache.cxf=WARN #log4j.logger.org.apache.cxf.jaxrs=WARN #log4j.logger.org.apache.cxf.phase=WARN #log4j.logger.org.apache.activemq=WARN #log4j.logger.org.apache.zookeeper=WARN #log4j.logger.com.baidu.disconf=WARN #log4j.logger.org.apache.commons.digester=WARN #log4j.logger.org.apache.http=WARN #log4j.logger.org.mongodb.driver.cluster=WARN #log4j.logger.com.alibaba.dubbo=WARN #log4j.logger.org.elasticsearch=WARN
ELKApiAppenderredis
package com.weds.framework.utils.elk; import java.util.Map; import java.util.concurrent.CompletableFuture; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.spi.LoggingEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import com.weds.framework.core.utils.JsonUtil; import com.weds.framework.core.utils.redis.RedisService; /** * * <p>Title: ApiAppender</p> * <p>Description: 重寫Appender 調用log4就時,將記錄存入redis</p> * <p>Company: Leyou(China) Chain Store Co.,Ltd</p> * <p>版權全部: Copyright?1999-2016 leyou.com. All Rights Reserved</p> * @author Illidan * @date 2016年5月19日 上午10:25:59 * @version V1.0 */ public class ELKApiAppender extends AppenderSkeleton{ /** * Jredis鏈接redis的client */ private RedisTemplate<String, Object> redisTemplate; /** * 記錄接口方法調用次很多天志須要先寫入redis中,redis的key不能爲空,這個key須要同步在logstash配置文件中配置 */ private String writeLogKey; @Override public void close() { // TODO Auto-generated method stub } @Override public boolean requiresLayout() { // TODO Auto-generated method stub return false; } /** * 重寫日誌輸出輸出 */ @Override protected void append(LoggingEvent event) { Map<String,Object> map =(Map<String,Object>)event.getMessage(); map.put("levl", event.getLevel().toString()); writeLogAsync(writeLogKey,map); } /** * 異步記錄日誌 * @param key 記錄到redis的中key,key須要同步在logstash配置文件中配置 * @param value 日誌的值,Map格式 */ public void writeLogAsync(String key,Map<String,Object> map){ CompletableFuture.runAsync(() -> { writeLog(key,map); }); } /** * * @Title: writeLogAsync * @Description: 異步存儲日誌 * @param * @return void 返回類型 * @throws * @author Illidan * @date 2016年5月18日 下午1:51:56 */ public void writeLogAsync(String key,String value){ CompletableFuture.runAsync(() -> { writeLog(key,value); }); } /** *記錄日誌到redis的List集合中,值爲Map集合方式 * @param key 記錄redis的key,key須要同步在logstash配置文件中配置 * @param map value爲Map值 */ public void writeLog(String key,Map<String,Object> map){ String value = JsonUtil.obj2string(map); writeLog(key, value); } /** * 記錄日誌到redis的List集合中 * @param key 記錄redis的key,key須要同步在logstash配置文件中配置 * @param value 記錄的值 */ public void writeLog(String key, String value) { if(key != null){ redisTemplate =(RedisTemplate<String, Object>)SpringContextUtil.getBean("elkRedisTemplate",RedisTemplate.class); redisTemplate.opsForList().rightPush(key, value); } } public RedisTemplate getRedisTemplate() { return redisTemplate; } public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public String getWriteLogKey() { return writeLogKey; } public void setWriteLogKey(String writeLogKey) { this.writeLogKey = writeLogKey; } }
用法:spring
protected static final Logger log = Logger.getLogger("elkLog");