Skip to content

Commit b66ce98

Browse files
committed
Global logger that wraps a consumer for common logging
The default global logger is effectively just System.out/err wrapped. This logger uses the same implementation that was made in MinecraftMaven, with indentations and some standard levels. The wrap is in case other projects want to use something other than sysout, like a Gradle project or task's own logger. Also, Logging Utils now targets Java 8 so that it can be used in Java Version if necessary. There's not a lot of code in this though so who cares.
1 parent e817e76 commit b66ce98

File tree

7 files changed

+139
-66
lines changed

7 files changed

+139
-66
lines changed

file-utils/src/main/java/net/minecraftforge/util/file/FileUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package net.minecraftforge.util.file;
66

77
import net.minecraftforge.srgutils.IMappingFile;
8+
import net.minecraftforge.util.logging.SimpleLogger;
89
import org.apache.commons.io.IOUtils;
910

1011
import java.io.ByteArrayOutputStream;

file-utils/src/main/java/net/minecraftforge/util/file/Task.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
package net.minecraftforge.util.file;
66

7-
import net.minecraftforge.util.logging.Log;
7+
import net.minecraftforge.util.logging.SimpleLogger;
88

99
import java.io.File;
1010
import java.util.Collections;
@@ -52,13 +52,15 @@ private Simple(String name, Set<Task> deps, Supplier<File> supplier) {
5252
@Override
5353
public File execute() {
5454
if (this.file == null) {
55+
var log = SimpleLogger.getGlobal();
56+
5557
for (var dep : deps)
5658
dep.execute();
57-
Log.log(name);
58-
Log.push();
59+
log.info(name);
60+
log.push();
5961
this.file = supplier.get();
60-
Log.debug("-> " + this.file.toString());
61-
Log.pop();
62+
log.debug("-> " + this.file.toString());
63+
log.pop();
6264
}
6365
return this.file;
6466
}

log-utils/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ dependencies {
1414
}
1515

1616
java {
17-
toolchain.languageVersion = JavaLanguageVersion.of(17)
17+
toolchain.languageVersion = JavaLanguageVersion.of(8)
1818
withSourcesJar()
1919
}
2020

2121
jar {
2222
manifest {
23+
attributes('Automatic-Module-Name': 'net.minecraftforge.utils.logging')
2324
attributes([
2425
'Specification-Title': 'Logging Utils',
2526
'Specification-Vendor': 'Forge Development LLC',

log-utils/src/main/java/module-info.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

log-utils/src/main/java/net/minecraftforge/util/logging/Log.java

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package net.minecraftforge.util.logging;
2+
3+
import org.jetbrains.annotations.Nullable;
4+
5+
import java.util.function.Consumer;
6+
7+
/**
8+
* A simple logger. Used to wrap loggers or output streams to make logging less of a pain in the ass. Each program that
9+
* uses Logging Utils should have their own instance of a simple logger.
10+
*
11+
* @see SysOut
12+
*/
13+
public interface SimpleLogger {
14+
/* GLOBAL */
15+
16+
static SimpleLogger getGlobal() {
17+
return Util.global;
18+
}
19+
20+
static void setGlobal(SimpleLogger logger) {
21+
Util.global = logger;
22+
}
23+
24+
25+
/* INDENTATION */
26+
27+
void push();
28+
29+
void pop();
30+
31+
int getIndent();
32+
33+
34+
/* LOGGING */
35+
36+
void log(Level level, String message);
37+
38+
enum Level {
39+
TRACE, DEBUG, INFO, WARN, ERROR, FATAL
40+
}
41+
42+
default void trace(String message) {
43+
log(Level.TRACE, message);
44+
}
45+
46+
default void debug(String message) {
47+
log(Level.DEBUG, message);
48+
}
49+
50+
default void info(String message) {
51+
log(Level.INFO, message);
52+
}
53+
54+
default void warn(String message) {
55+
log(Level.WARN, message);
56+
}
57+
58+
default void error(String message) {
59+
log(Level.ERROR, message);
60+
}
61+
62+
default void fatal(String message) {
63+
log(Level.FATAL, message);
64+
}
65+
66+
abstract class Consuming implements SimpleLogger {
67+
private byte indent;
68+
69+
@Override
70+
public void push() {
71+
this.indent++;
72+
}
73+
74+
@Override
75+
public void pop() {
76+
if (--this.indent < 0)
77+
throw new IllegalArgumentException("Cannot pop logger below 0");
78+
}
79+
80+
@Override
81+
public int getIndent() {
82+
return this.indent;
83+
}
84+
85+
protected abstract @Nullable Consumer<String> getOut(Level level);
86+
87+
@Override
88+
public void log(Level level, String message) {
89+
Consumer<String> out = this.getOut(level);
90+
if (out == null) return;
91+
92+
if (this.indent != 0) {
93+
StringBuilder builder = new StringBuilder(message);
94+
for (int i = 0; i < this.indent; i++)
95+
builder.insert(0, " ");
96+
message = builder.toString();
97+
}
98+
99+
out.accept(message);
100+
}
101+
}
102+
103+
final class SysOut extends Consuming {
104+
private final boolean debug;
105+
106+
public SysOut() {
107+
this(false);
108+
}
109+
110+
public SysOut(boolean debug) {
111+
this.debug = debug;
112+
}
113+
114+
@Override
115+
protected @Nullable Consumer<String> getOut(Level level) {
116+
if (!this.debug && (level == Level.TRACE || level == Level.DEBUG))
117+
return null;
118+
else if (level == Level.INFO)
119+
return System.out::println;
120+
else
121+
return System.err::println;
122+
}
123+
}
124+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package net.minecraftforge.util.logging;
2+
3+
class Util {
4+
static SimpleLogger global = new SimpleLogger.SysOut();
5+
}

0 commit comments

Comments
 (0)