Melhorar codigo

5 respostas
M

Gostaria de receber umas dicas para melhorar este codigo. A classe tem o objetivo de criar Logs para o meu programa.

public class Log {

private static Log log;
private final static String PATH = FileSystemView.getFileSystemView().getHomeDirectory().getPath() + "/M4Cloud/Logs/";

static {
    log = new Log();
}

private Log() {
    verificarExiste();
}

public void logar(String texto) {
    System.out.println(texto);
    escreverLinha(texto);
}

private void escreverLinha(String texto) throws RuntimeException {
    DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
    Date hoje = new Date();
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(PATH + formatter.format(hoje) + ".txt"))) {
        bw.write("[" + new SimpleDateFormat("HH:mm:ss").format(hoje) + "] " + texto);
        bw.newLine();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

private void verificarExiste() {
    criarDiretorioLog();
    criarArquivoLog();
}

private void criarArquivoLog() {
    Date hoje = new Date();
    DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
    if (!new File(PATH + formatter.format(hoje) + ".txt").exists()) {
        escreverLinha("##CRIADO EM " + formatter.format(hoje) + " POR M4CLOUD##");
    }
}

private void criarDiretorioLog() {
    if (!new File(PATH).isDirectory()) {
        new File(PATH).mkdirs();
    }
}

public static Log getInstance() {
    return log;
}

}

5 Respostas

javaflex

Não vi tudo, mas de primeira creio que não seja necessário esse try catch. Se o compilador tiver exigindo, jogue no throws, por mais que assim ainda seja verboso, mas é o mundo Java.

lvbarbosa

Não fixe o diretório dessa forma, passe por parâmetro de alguma maneira.

Fora isso, se o seu programa for grande e ficar chamando esse método de escrita de log toda hora, ele vai virar um gargalo. Você pode usar uma fila sincronizada e deixar uma thread responsavel só por escrever o log, tirando o gargalo do disk write.

M

Tem algum motivo pelo qual nao o deva fazer, ou normalmente nao é feito assim?

Pode dar um exemplo simples disso?

M

Em que situações devo usar throws?

javaflex

Infelizmente vejo muitos usando catch sem necessidade. Vai usar quando for fazer algo de útil dentro do catch para atender a funcionalidade.

Neste seu caso creio que precise apenas do try (…) { … } sem catch.

Sobre throws no método vai usar quando o compilador te obrigar, nada importante pra atender a funcionalidade, é por pura verbosidade do java.

Criado 16 de novembro de 2018
Ultima resposta 16 de nov. de 2018
Respostas 5
Participantes 3