package com.sunyard.sge.log; import com.sunyard.sge.database.Consts; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.appender.FileAppender; import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy; import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy; import org.apache.logging.log4j.core.config.AppenderRef; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.LoggerConfig; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.Logger; import java.text.SimpleDateFormat; import java.util.Date; /** * 金交所定制日志 */ public class LogFactory { // 金交所定制日志 public static final String logName = "sge-hsm-sydapi-log"; // 日志级别 public static int iLogLevel = Consts.LogLevelOFF; // Levels public static final Level[] levels = new Level[]{ Level.OFF, Level.ERROR, Level.INFO, Level.DEBUG }; // 日志目录 public static String pcLogPath = "./sydapi-logs/"; // 日期格式 private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); private LogFactory() { } public static void start() { // 上下文 final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); final Configuration config = ctx.getConfiguration(); // 创建一个展示的样式 Layout layout = PatternLayout.createLayout( "[%level{DEBUG=3, INFO=2, ERROR=1, OFF=0}: %d{ISO8601} <%thread>] %message%n%throwable", null, config, null, null, true, false, null, null); TriggeringPolicy tp = SizeBasedTriggeringPolicy.createPolicy("10MB"); // Appender appender = RollingFileAppender.createAppender(String.format("logs/test/syncshows-job-%s.log", jobID), // "/logs/test/" + jobID + "/syncshows-job-" + jobID + ".log.gz", // "true", jobID, null, null, null, tp, null, layout, null, // null, null, null, config); // 日志打印方式——输出为文件    Appender appender = FileAppender.createAppender( String.format( pcLogPath +"sydapi_"+getToday() + ".log"), "true", "false", logName, null, "true", "true", null, layout, null, null, null, config); appender.start(); config.addAppender(appender); AppenderRef ref = AppenderRef.createAppenderRef( logName, levels[ iLogLevel ], null); AppenderRef[] refs = new AppenderRef[]{ref}; LoggerConfig loggerConfig = LoggerConfig.createLogger("false", levels[ iLogLevel ], logName, "true", refs, null, config, null); loggerConfig.addAppender(appender, levels[ iLogLevel ], null); config.addLogger( logName, loggerConfig); ctx.updateLoggers(); } public static void stop() { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); final Configuration config = ctx.getConfiguration(); config.getAppender( logName ).stop(); config.getLoggerConfig(logName).removeAppender( logName); config.removeLogger(logName); ctx.updateLoggers(); } public static String getToday(){ return format.format( new Date()); } /** * 创建 Logger * @return Logger */ public static Logger createLogger(String pcLogPath, int iLogLevel) { LogFactory.pcLogPath = pcLogPath; LogFactory.iLogLevel = iLogLevel; start(); return LogManager.getLogger(logName); } /** * 获取 Logger * @return Logger */ public static Logger getLogger() { return LogManager.getLogger(logName); } }