From a2d24875ccb3ef33d362849a7ce9c776451b978b Mon Sep 17 00:00:00 2001 From: kevin-zhao-mac-book Date: Tue, 23 Jul 2019 20:17:42 +1000 Subject: [PATCH] add log4j2 adaptor --- build.gradle | 7 +- .../io/github/kev1nst/jenkins/Jenkins.java | 3 +- .../kev1nst/jenkins/common/Log4j2Adapter.java | 172 ++++++++++++++++++ .../kev1nst/jenkins/job/JobBuilder.java | 2 +- .../impl/DefaultJobProgressHandler.java | 8 +- .../java/io/github/kev1nst/jenkins/Demo.java | 7 +- src/test/resources/log4j2.xml | 14 ++ 7 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/github/kev1nst/jenkins/common/Log4j2Adapter.java create mode 100644 src/test/resources/log4j2.xml diff --git a/build.gradle b/build.gradle index 89c84ad..4dedf45 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ plugins { apply plugin: 'com.bmuschko.nexus' group 'io.github.kev1nst' -version '1.0.2' +version '1.0.3' sourceCompatibility = 1.8 @@ -27,6 +27,11 @@ repositories { dependencies { compile group: 'org.nutz', name: 'nutz', version: '1.r.67' testCompile group: 'junit', name: 'junit', version: '4.12' + compileOnly group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1' + compileOnly group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1' + testCompile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1' + testCompile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1' + } nexusStaging { diff --git a/src/main/java/io/github/kev1nst/jenkins/Jenkins.java b/src/main/java/io/github/kev1nst/jenkins/Jenkins.java index eca8d0b..bf13e2d 100644 --- a/src/main/java/io/github/kev1nst/jenkins/Jenkins.java +++ b/src/main/java/io/github/kev1nst/jenkins/Jenkins.java @@ -26,12 +26,13 @@ * @since 20/07/2019 */ public class Jenkins { + static Log LOG = Logs.get(); private static final String UTF_8 = "utf-8"; private String url; private Header header; private int timeout = 10000; - Log LOG= Logs.get(); + private Jenkins(String url, String account, String creds) { auth(url, account, creds); } diff --git a/src/main/java/io/github/kev1nst/jenkins/common/Log4j2Adapter.java b/src/main/java/io/github/kev1nst/jenkins/common/Log4j2Adapter.java new file mode 100644 index 0000000..b3e99c5 --- /dev/null +++ b/src/main/java/io/github/kev1nst/jenkins/common/Log4j2Adapter.java @@ -0,0 +1,172 @@ +package io.github.kev1nst.jenkins.common; + +/** + * @author kevinzhao + * @since 23/07/2019 + */ + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.nutz.log.Log; +import org.nutz.log.LogAdapter; +import org.nutz.log.impl.AbstractLog; +import org.nutz.plugin.Plugin; + +public class Log4j2Adapter implements LogAdapter, Plugin { + + @Override + public boolean canWork() { + try { + org.apache.logging.log4j.Logger.class.getName(); + return true; + } + catch (Throwable e) {} + return false; + } + + @Override + public Log getLogger(String className) { + return new Log4j2Adapter.Log4JLogger(className); + } + + static class Log4JLogger extends AbstractLog { + + public static final String SUPER_FQCN = AbstractLog.class.getName(); + public static final String SELF_FQCN = Log4j2Adapter.class.getName(); + + private Logger logger; + + private static boolean hasTrace; + + static { + try { + Level.class.getDeclaredField("TRACE"); + hasTrace = true; + } + catch (Throwable e) {} + } + + Log4JLogger(String className) { + logger = LogManager.getLogger(className); + + isFatalEnabled = logger.isFatalEnabled(); + isErrorEnabled = logger.isErrorEnabled(); + isWarnEnabled = logger.isWarnEnabled(); + isInfoEnabled = logger.isInfoEnabled(); + isDebugEnabled = logger.isDebugEnabled(); + if (hasTrace){ + isTraceEnabled = logger.isTraceEnabled(); + } + + } + + @Override + public void debug(Object message, Throwable t) { + if (isDebugEnabled()) { + logger.debug(message,t); + } + } + + @Override + public void error(Object message, Throwable t) { + if (isErrorEnabled()) { + logger.error(message, t); + } + + } + + @Override + public void fatal(Object message, Throwable t) { + if (isFatalEnabled()) { + logger.fatal(message, t); + } + } + + @Override + public void info(Object message, Throwable t) { + if (isInfoEnabled()) { + logger.info(message, t); + } + } + + @Override + public void trace(Object message, Throwable t) { + if (isTraceEnabled()) { + logger.trace( message, t); + } else if ((!hasTrace) && isDebugEnabled()) { + logger.debug(message, t); + } + } + + @Override + public void warn(Object message, Throwable t) { + if (isWarnEnabled()) { + logger.warn(message, t); + } + } + + @Override + protected void log(int level, Object message, Throwable tx) { + switch (level) { + case LEVEL_FATAL: + fatal(message,tx); + break; + case LEVEL_ERROR: + error(message,tx); + break; + case LEVEL_WARN: + warn(message,tx); + break; + case LEVEL_INFO: + info(message,tx); + break; + case LEVEL_DEBUG: + debug(message,tx); + break; + case LEVEL_TRACE: + if (hasTrace) { + logger.trace(message, tx); + } else { + logger.debug(message, tx); + } + break; + default: + break; + } + } + + @Override + public boolean isDebugEnabled() { + return logger.isDebugEnabled(); + } + + @Override + public boolean isErrorEnabled() { + return logger.isErrorEnabled(); + } + + @Override + public boolean isFatalEnabled() { + return logger.isFatalEnabled(); + } + + @Override + public boolean isInfoEnabled() { + return logger.isInfoEnabled(); + } + + @Override + public boolean isTraceEnabled() { + if (!hasTrace) { + return logger.isDebugEnabled(); + } + return logger.isTraceEnabled(); + } + + @Override + public boolean isWarnEnabled() { + return logger.isWarnEnabled(); + } + } +} diff --git a/src/main/java/io/github/kev1nst/jenkins/job/JobBuilder.java b/src/main/java/io/github/kev1nst/jenkins/job/JobBuilder.java index c010e10..2be252f 100644 --- a/src/main/java/io/github/kev1nst/jenkins/job/JobBuilder.java +++ b/src/main/java/io/github/kev1nst/jenkins/job/JobBuilder.java @@ -51,7 +51,7 @@ public BuildStatus await(int timeout, JobProgressHandler jobProgressHandler) { * @return the build status obj */ public BuildStatus await(int timeout) { - JobProgressHandler jobProgressHandler = new DefaultJobProgressHandler(LOG); + JobProgressHandler jobProgressHandler = new DefaultJobProgressHandler(); return await(timeout, jobProgressHandler); } /** diff --git a/src/main/java/io/github/kev1nst/jenkins/job/handler/impl/DefaultJobProgressHandler.java b/src/main/java/io/github/kev1nst/jenkins/job/handler/impl/DefaultJobProgressHandler.java index 97b26bf..4627695 100644 --- a/src/main/java/io/github/kev1nst/jenkins/job/handler/impl/DefaultJobProgressHandler.java +++ b/src/main/java/io/github/kev1nst/jenkins/job/handler/impl/DefaultJobProgressHandler.java @@ -5,22 +5,24 @@ import io.github.kev1nst.jenkins.job.po.BuildStatus; import io.github.kev1nst.jenkins.job.po.QueueItem; import org.nutz.log.Log; +import org.nutz.log.Logs; /** + * the default job progress adapter to extend with * @author kevinzhao * @since 20/07/2019 */ public class DefaultJobProgressHandler implements JobProgressHandler { - Log LOG; + Log LOG= Logs.get(); @Override public void onExecute(QueueItem item) { } - public DefaultJobProgressHandler(Log LOG) { - this.LOG = LOG; + public DefaultJobProgressHandler() { + } @Override diff --git a/src/test/java/io/github/kev1nst/jenkins/Demo.java b/src/test/java/io/github/kev1nst/jenkins/Demo.java index 9abdd50..4207dd8 100644 --- a/src/test/java/io/github/kev1nst/jenkins/Demo.java +++ b/src/test/java/io/github/kev1nst/jenkins/Demo.java @@ -1,11 +1,13 @@ package io.github.kev1nst.jenkins; +import io.github.kev1nst.jenkins.common.Log4j2Adapter; import io.github.kev1nst.jenkins.job.handler.JobProgressHandler; import io.github.kev1nst.jenkins.job.po.JobSubmission; import io.github.kev1nst.jenkins.job.po.QueueItem; import org.junit.Test; import io.github.kev1nst.jenkins.job.po.BuildStatus; import org.nutz.lang.Lang; +import org.nutz.log.Logs; /** * @author kevinzhao @@ -13,7 +15,10 @@ */ public class Demo { - + static { + System.setProperty("log4j.configurationFile", "log4j2.xml"); + Logs.setAdapter(new Log4j2Adapter()); + } private static final String CREDENTIAL = "9aebe96f61819ce2c20c01a820719f70"; // could be password or api token, this one is just a dummy cfredential, don't panic... private static final String ACCOUNT = "admin"; private static final String JENKINS_URL = "http://localhost:8081"; diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml new file mode 100644 index 0000000..f0c0b06 --- /dev/null +++ b/src/test/resources/log4j2.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file