All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.xiancloud.graylog2.GelfLog4j1Init Maven / Gradle / Ivy

package info.xiancloud.graylog2;

import com.alibaba.fastjson.JSONObject;
import info.xiancloud.core.conf.XianConfig;
import info.xiancloud.core.distribution.LocalNodeManager;
import info.xiancloud.core.log.ICentralizedLogInitializer;
import info.xiancloud.core.util.EnvUtil;
import info.xiancloud.core.util.JavaPIDUtil;
import info.xiancloud.core.util.LOG;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.graylog2.log.GelfAppender;
import org.graylog2.log.GelfJsonAppender;

/**
 * 

create or destroy gelf-log4j1 client

* * @author happyyangyuan */ public class GelfLog4j1Init implements ICentralizedLogInitializer { private static final String GELF_APPENDER_NAME = "graylog2"; private static boolean initialized = false; @Override public void init() { try { init0(); } catch (AlreadyInitializedException e) { throw new RuntimeException("Gelf-log4j1 failed to initialize.", e); } } public static final class AlreadyInitializedException extends Exception { @Override public String getMessage() { return "graylog is already initialized!"; } } public static final class AlreadyDestroyedException extends Exception { @Override public String getMessage() { return "graylog is already destroyed!"; } } synchronized public static void init0() throws AlreadyInitializedException { if (initialized) { throw new AlreadyInitializedException(); } System.out.println("Starting graylog client..."); /*GraylogUdpConnPool.create();*/ addGelfAppender(); initialized = true; LOG.info("graylog client started."); } synchronized public static void destroy() throws AlreadyDestroyedException { if (!initialized) { throw new AlreadyDestroyedException(); } LOG.info("destroying graylog client..."); /*GraylogUdpConnPool.destroy();*/ removeGelfAppender(); initialized = false; System.out.println("graylog client is shutdown. (this log cannot be sent to graylog server.)"); } private static void addGelfAppender() { GelfAppender appender = new GelfJsonAppender/*GelfAppender GelfJsonAppender*/(); appender.setName(GELF_APPENDER_NAME); if (EnvUtil.isLan()) { appender.setGraylogHost(XianConfig.get("gelfInputLanUrl")); } else { appender.setGraylogHost(XianConfig.get("gelfInputInternetUrl")); } appender.setGraylogPort(XianConfig.getIntValue("gelfInputInternetUrl")); appender.setFacility("gelf-java"); appender.setLayout(new PatternLayout() {{ setConversionPattern("%p %m"); }}); appender.setExtractStacktrace(true); appender.setIncludeLocation(false); JSONObject additionalFields = new JSONObject() {{ put("environment", EnvUtil.getEnv()); put("application", EnvUtil.getApplication()); put("pid", JavaPIDUtil.getProcessName()); put("nodeId", LocalNodeManager.LOCAL_NODE_ID); }}; appender.setAddExtendedInformation(true); appender.setAdditionalFields(additionalFields.toJSONString()); appender.setOriginHost(JavaPIDUtil.getHostname()); appender.activateOptions();//让以上设置生效 Logger.getRootLogger().addAppender(appender); } private static void removeGelfAppender() { Logger.getRootLogger().removeAppender(GELF_APPENDER_NAME); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy