diff --git a/.gitignore b/.gitignore index a8f0ca1..63acbef 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ buildNumber.properties # Eclipse Core .project # JDT-specific (Eclipse Java Development Tools) -.classpath \ No newline at end of file +.classpath +# Log files +log/ diff --git a/notes.txt b/notes.txt index 4ef62ce..fcf3374 100644 --- a/notes.txt +++ b/notes.txt @@ -12,3 +12,8 @@ on successful peer list retrieval - local tracker cache updated. If not, peers f On re-announce to destination trackers, proxied peer's real IP must be injected into announce request and other parameters should remain same as in original request. + + + +Maven exec with args: + mvn exec:java -Dexec.args='' \ No newline at end of file diff --git a/pom.xml b/pom.xml index d9f459e..74a7554 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,21 @@ netty-buffer 4.1.114.Final + + commons-cli + commons-cli + 1.9.0 + + + org.slf4j + slf4j-api + 2.0.16 + + + ch.qos.logback + logback-classic + 1.5.11 + diff --git a/src/main/java/com/mykola2312/retracker/App.java b/src/main/java/com/mykola2312/retracker/App.java index 2f0e222..8223a6b 100644 --- a/src/main/java/com/mykola2312/retracker/App.java +++ b/src/main/java/com/mykola2312/retracker/App.java @@ -1,10 +1,69 @@ package com.mykola2312.retracker; -/** - * Hello world! - */ +import java.io.File; +import java.nio.file.Path; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.encoder.PatternLayoutEncoder; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.FileAppender; + public class App { + private static final Logger log = LoggerFactory.getLogger(App.class); + public static void main(String[] args) { - System.out.println("Hello World!"); + final Options options = new Options() + .addOption("l", "log", true, "log dir path"); + final Option logDirOpt = options.getOption("log"); + + CommandLine cli = null; + try { + cli = new DefaultParser().parse(options, args); + } catch (ParseException e) { + System.err.printf("Argument error: %s\n", e.toString()); + System.exit(1); + } + + String logDirPath = cli.getOptionValue(logDirOpt); + if (logDirPath != null) { + // setup file logging + File logDir = new File(logDirPath); + if (!logDir.exists()) { + if (!logDir.mkdir()) { + System.err.println("Failed to create log dir"); + System.exit(1); + } + } + + // https://stackoverflow.com/questions/47299109/programmatically-add-appender-in-logback + final LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory(); + final PatternLayoutEncoder ple = new PatternLayoutEncoder(); + ple.setPattern("%d{HH:mm:ss} %-5level %logger{0} - %msg%n"); + ple.setContext(lc); + ple.start(); + + FileAppender fileAppender = new FileAppender(); + fileAppender.setFile(Path.of(logDirPath, "log_out.log").toString()); + fileAppender.setEncoder(ple); + fileAppender.setContext(lc); + fileAppender.start(); + + ch.qos.logback.classic.Logger logbackLogger = + (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("com.mykola2312"); + logbackLogger.addAppender(fileAppender); + logbackLogger.setLevel(Level.INFO); + logbackLogger.setAdditive(false); + } + + log.info("retracker started!"); } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..1962a20 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,18 @@ + + + + + + %d{HH:mm:ss} %highlight(%-5level) %logger{0} - %msg%n + + + + + + + + + + + + \ No newline at end of file