add command line parser, implement logging

This commit is contained in:
mykola2312 2024-10-19 08:55:57 +03:00
parent b0e3b379d3
commit 07c3128753
5 changed files with 104 additions and 5 deletions

2
.gitignore vendored
View file

@ -15,3 +15,5 @@ buildNumber.properties
.project .project
# JDT-specific (Eclipse Java Development Tools) # JDT-specific (Eclipse Java Development Tools)
.classpath .classpath
# Log files
log/

View file

@ -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 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. other parameters should remain same as in original request.
Maven exec with args:
mvn exec:java -Dexec.args=''

15
pom.xml
View file

@ -45,6 +45,21 @@
<artifactId>netty-buffer</artifactId> <artifactId>netty-buffer</artifactId>
<version>4.1.114.Final</version> <version>4.1.114.Final</version>
</dependency> </dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.16</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.11</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View file

@ -1,10 +1,69 @@
package com.mykola2312.retracker; package com.mykola2312.retracker;
/** import java.io.File;
* Hello world! 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 { public class App {
private static final Logger log = LoggerFactory.getLogger(App.class);
public static void main(String[] args) { 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<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
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!");
} }
} }

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{HH:mm:ss} %highlight(%-5level) %logger{0} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="com.mykola2312" level="info" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>