From 07c3128753f882e013555136d128beb8ba404cf3 Mon Sep 17 00:00:00 2001
From: mykola2312 <49044616+mykola2312@users.noreply.github.com>
Date: Sat, 19 Oct 2024 08:55:57 +0300
Subject: [PATCH] add command line parser, implement logging
---
.gitignore | 4 +-
notes.txt | 5 ++
pom.xml | 15 +++++
.../java/com/mykola2312/retracker/App.java | 67 +++++++++++++++++--
src/main/resources/logback.xml | 18 +++++
5 files changed, 104 insertions(+), 5 deletions(-)
create mode 100644 src/main/resources/logback.xml
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