Added Logger

This commit is contained in:
Klemek
2018-04-25 14:16:07 +02:00
parent 65e597ed52
commit f855b6eaea
9 changed files with 154 additions and 18 deletions
+4
View File
@@ -0,0 +1,4 @@
handlers=java.util.logging.ConsoleHandler
.level=WARNING
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=[%1$tF %1$tT][%4$s]%5$s %n
+7 -5
View File
@@ -2,6 +2,7 @@ package fr.klemek.marble;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.logging.Level;
class DefaultGenerator extends Generator { class DefaultGenerator extends Generator {
@@ -38,14 +39,15 @@ class DefaultGenerator extends Generator {
void generate() { void generate() {
if (seed == 0L) if (seed == 0L)
seed = ThreadLocalRandom.current().nextLong(); seed = ThreadLocalRandom.current().nextLong();
System.out.println("\t\tseed : " + seed); Logger.log(Level.INFO, "Generating....");
System.out.println("\t\tsize : " + size); Logger.log(Level.INFO, "\tseed : {0}", seed);
System.out.println("\t\tslope : " + slope); Logger.log(Level.INFO, "\tsize : {0}", size);
System.out.println("\t\tdivergence : " + divergence + " = " + divergence.sum()); Logger.log(Level.INFO, "\tslope : {0}", slope);
Logger.log(Level.INFO, "\tdivergence : {0} = {1}", divergence, divergence.sum());
rand = new Random(seed); rand = new Random(seed);
table = new Color[width2][height2]; table = new Color[width2][height2];
table[0][0] = source == null ? Color.random(rand) : source; table[0][0] = source == null ? Color.random(rand) : source;
System.out.println("\t\tsource : " + source); Logger.log(Level.INFO, "\tsource : {0}", source);
for (int y = 0; y < height2; y++) for (int y = 0; y < height2; y++)
generateLine(y); generateLine(y);
} }
+2 -1
View File
@@ -2,6 +2,7 @@ package fr.klemek.marble;
import java.io.File; import java.io.File;
import java.util.Random; import java.util.Random;
import java.util.logging.Level;
abstract class Generator { abstract class Generator {
@@ -57,7 +58,7 @@ abstract class Generator {
for (int x = 0; x < width2; x++) { for (int x = 0; x < width2; x++) {
for (int j = 0; j < Math.min(size, width - x * size); j++) { for (int j = 0; j < Math.min(size, width - x * size); j++) {
if (k >= data.length) { if (k >= data.length) {
System.err.println("\t\toverflow at x:" + x + " y:" + y + " j:" + j + " k:" + k); Logger.log(Level.SEVERE, "Overflow at x:{0} y:{1} j:{2} k:{3}", x, y, k, j);
return data; return data;
} }
data[k++] = table[x][y].r; data[k++] = table[x][y].r;
+2 -2
View File
@@ -69,7 +69,7 @@ final class ImageUtils {
fos.write(data); fos.write(data);
return true; return true;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); Logger.logError(e);
return false; return false;
} }
} }
@@ -80,7 +80,7 @@ final class ImageUtils {
ImageIO.write(inputImage, "JPG", jpgFile); ImageIO.write(inputImage, "JPG", jpgFile);
return true; return true;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); Logger.logError(e);
return false; return false;
} }
} }
+1
View File
@@ -5,6 +5,7 @@ import java.io.File;
class LocalTests { class LocalTests {
public static void main(String[] args) { public static void main(String[] args) {
Logger.init("logging.properties");
DefaultGenerator gen = new DefaultGenerator(800, 800, 2); DefaultGenerator gen = new DefaultGenerator(800, 800, 2);
gen.generate(); gen.generate();
gen.saveBmp(new File("temp.bmp")); gen.saveBmp(new File("temp.bmp"));
+113
View File
@@ -0,0 +1,113 @@
package fr.klemek.marble;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.LogManager;
/**
* Simple logger for this application
*
* @author Clement Gouin
*/
final class Logger {
private static java.util.logging.Logger appLogger = java.util.logging.Logger.getLogger("VSquare");
private Logger() {
}
/**
* Change the log level of this logger
*
* @param newLevel the level of log to show
*/
private static void setLevel(Level newLevel) {
appLogger.setLevel(newLevel);
}
/**
* @return the current logger level;
*/
public static Level getLevel() {
return appLogger.getLevel();
}
/**
* Load a config file for the logger and set locale to english
*
* @param relativePath the path in resources of the config file
*/
public static void init(String relativePath) {
init(relativePath, Level.INFO);
}
/**
* Load a config file for the logger and set locale to english
*
* @param relativePath the path in resources of the config file
* @param level the level to set the logger to
*/
private static void init(String relativePath, Level level) {
Locale.setDefault(Locale.ENGLISH);
loadConfigFromFile(relativePath);
Logger.setLevel(level);
}
/**
* Load a config file for the logger
*
* @param relativePath the path in resources of the config file
*/
private static void loadConfigFromFile(String relativePath) {
try {
InputStream is = Logger.class.getClassLoader().getResourceAsStream(relativePath);
if (is == null) {
Logger.log(Level.SEVERE, "Logger config file not found at path {0}", relativePath);
return;
}
LogManager.getLogManager().readConfiguration(is);
appLogger = java.util.logging.Logger.getLogger("VSquare");
} catch (IOException e) {
Logger.log(Level.SEVERE, e.toString(), e);
}
}
/**
* Log a message
*
* @param lvl the level of logging
* @param message the message
* @param objects the object for the message formatting
*/
static void log(Level lvl, String message, Object... objects) {
Logger.log(Utils.getCallingClassName(3), lvl, message, objects);
}
/**
* Log a message
*
* @param source the source class name
* @param lvl the level of logging
* @param message the message
* @param objects the object for the message formatting
*/
private static void log(String source, Level lvl, String message, Object... objects) {
message = String.format("[VSquare-%s] %s", source, message);
appLogger.log(lvl, message, objects);
if (lvl == Level.SEVERE && objects.length > 0 && objects[0] instanceof Exception) {
Exception e = (Exception) objects[0];
for (StackTraceElement ste : e.getStackTrace())
Logger.log(source, Level.SEVERE, "\t {0}", ste);
}
}
static void logError(Exception ex) {
Logger.logError(Level.SEVERE, ex);
}
private static void logError(Level lvl, Exception ex) {
Logger.log(lvl, ex.toString(), ex);
}
}
+1 -1
View File
@@ -16,7 +16,7 @@ class MarbleViewer extends JFrame {
private class Panel extends JPanel { private class Panel extends JPanel {
private transient final Generator generator; private final transient Generator generator;
Panel(Generator generator) { Panel(Generator generator) {
this.generator = generator; this.generator = generator;
+12
View File
@@ -84,4 +84,16 @@ final class Utils {
static int div(Random rand, byte src) { static int div(Random rand, byte src) {
return Math.round(rand.nextFloat() * 2 * src - src); return Math.round(rand.nextFloat() * 2 * src - src);
} }
/*
* Other utils
*/
static String getCallingClassName(int stackLevel) {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
if (stackLevel >= stackTrace.length)
return null;
String[] source = stackTrace[stackLevel].getClassName().split("\\.");
return source[source.length - 1];
}
} }
+12 -9
View File
@@ -4,11 +4,14 @@ import java.awt.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.logging.Level;
class WallpaperGenerator { class WallpaperGenerator {
public static void main(String[] args) { public static void main(String[] args) {
Logger.init("logging.properties");
String file = "wallpaper"; String file = "wallpaper";
Dimension screen = getScreenSizes(); Dimension screen = getScreenSizes();
int width = screen.width; int width = screen.width;
@@ -41,7 +44,7 @@ class WallpaperGenerator {
} }
private static void makeWallpaper(String name, int width, int height, int size) { private static void makeWallpaper(String name, int width, int height, int size) {
System.out.println("Making wallpaper '" + name + "' " + width + "x" + height + "px"); Logger.log(Level.INFO, "Making wallpaper '{0}' {1}x{2}px", name, width, height);
File bmpFile = new File(name + ".bmp"); File bmpFile = new File(name + ".bmp");
File outputFile = new File(name + ".jpg"); File outputFile = new File(name + ".jpg");
@@ -50,30 +53,30 @@ class WallpaperGenerator {
DefaultGenerator gen = size == 0 ? new DefaultGenerator(width, height) : new DefaultGenerator(width, height, size); DefaultGenerator gen = size == 0 ? new DefaultGenerator(width, height) : new DefaultGenerator(width, height, size);
long t1 = System.currentTimeMillis(); long t1 = System.currentTimeMillis();
gen.generate(); gen.generate();
System.out.println("\tGeneration done in " + (System.currentTimeMillis() - t1) + " ms"); Logger.log(Level.INFO, "\tGeneration done in {0} ms", (System.currentTimeMillis() - t1));
t1 = System.currentTimeMillis(); t1 = System.currentTimeMillis();
byte[] file = ImageUtils.generateBmpFile(width, gen.getData()); byte[] file = ImageUtils.generateBmpFile(width, gen.getData());
System.out.println("\t\t" + file.length + " bytes"); Logger.log(Level.INFO, "\t\tData : {0} bytes", file.length);
System.out.println("\tData writing done in " + (System.currentTimeMillis() - t1) + " ms"); Logger.log(Level.INFO, "\tData writing done in {0} ms", (System.currentTimeMillis() - t1));
t1 = System.currentTimeMillis(); t1 = System.currentTimeMillis();
if (!ImageUtils.saveBmpFile(file, bmpFile)) if (!ImageUtils.saveBmpFile(file, bmpFile))
return; return;
System.out.println("\tFile writing done in " + (System.currentTimeMillis() - t1) + " ms"); Logger.log(Level.INFO, "\tFile '{0}' writing done in {1} ms", bmpFile, (System.currentTimeMillis() - t1));
t1 = System.currentTimeMillis(); t1 = System.currentTimeMillis();
if (!ImageUtils.convertBmpToJpg(bmpFile, outputFile)) if (!ImageUtils.convertBmpToJpg(bmpFile, outputFile))
return; return;
System.out.println("\tFile converting done in " + (System.currentTimeMillis() - t1) + " ms"); Logger.log(Level.INFO, "\tFile '{0}' conversion to '{1}' done in {2} ms", bmpFile, outputFile, (System.currentTimeMillis() - t1));
try { try {
Files.delete(bmpFile.toPath()); Files.delete(bmpFile.toPath());
System.out.println("\tFile '" + bmpFile.getName() + "' deleted"); Logger.log(Level.INFO, "\tFile '{0}' deleted", bmpFile);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); Logger.logError(e);
} }
System.out.println("Wallpaper done in " + (System.currentTimeMillis() - t0) + " ms"); Logger.log(Level.INFO, "Wallpaper done in {0} ms", (System.currentTimeMillis() - t0));
} }
} }