java - 简单的 apache 常见记录器

标签 java logging

我需要使用 Apache common simplelog 将日志写入文本文件,而不是将其打印到 System.err 中。

我在 write 方法中使用 FileWriter,它创建文件但不打印缓冲区中的数据。

protected void log(int type, Object message, Throwable t) {

    StringBuffer buf = new StringBuffer();


    if(showDateTime) {
        Date now = new Date();
        String dateText;
        synchronized(dateFormatter) {
            dateText = dateFormatter.format(now);
        }
        buf.append(dateText);
        buf.append(" ");
    }


    switch(type) {
        case SimpleLog.LOG_LEVEL_TRACE: buf.append("[TRACE] "); break;
        case SimpleLog.LOG_LEVEL_DEBUG: buf.append("[DEBUG] "); break;
        case SimpleLog.LOG_LEVEL_INFO:  buf.append("[INFO] ");  break;
        case SimpleLog.LOG_LEVEL_WARN:  buf.append("[WARN] ");  break;
        case SimpleLog.LOG_LEVEL_ERROR: buf.append("[ERROR] "); break;
        case SimpleLog.LOG_LEVEL_FATAL: buf.append("[FATAL] "); break;
    }


    if( showShortName) {
        if( shortLogName==null ) {

            shortLogName = logName.substring(logName.lastIndexOf(".") + 1);
            shortLogName =
                shortLogName.substring(shortLogName.lastIndexOf("/") + 1);
        }
        buf.append(String.valueOf(shortLogName)).append(" - ");
    } else if(showLogName) {
        buf.append(String.valueOf(logName)).append(" - ");
    }


    buf.append(String.valueOf(message));


    if(t != null) {
        buf.append(" <");
        buf.append(t.toString());
        buf.append(">");

        java.io.StringWriter sw= new java.io.StringWriter(1024);
        java.io.PrintWriter pw= new java.io.PrintWriter(sw);
        t.printStackTrace(pw);
        pw.close();
        buf.append(sw.toString());
    }


    write(buf);

}



protected void write(StringBuffer buffer) {

      System.err.println(buffer.toString());// want to print to a file rather than to err

     FileWriter file=new FileWriter(new File("d:/log.txt"));
     file.write(buffer.toString());   


}

最佳答案

您需要flush the stream :

file.flush()

或者如果您确实完成了对文件的写入,则需要 close the writer 。 :

file.close()

close() 在关闭之前刷新流。

关于java - 简单的 apache 常见记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634738/

相关文章:

python - Python 日志记录模块中字段组合的固定长度格式

java - 如何抑制日志消息 'Returning cached instance of singleton bean'?

Python 日志记录 - 仅适用于自己导入的模块

python - 将自定义日志处理程序添加到 Pyramid

java - 如何使用可变参数从函数返回一个字符串

java - 旧版 Java 语法

java - jar 文件不显示(关闭太快)

java - 从 url 传递 header /参数名称时,apache Camel RouteBuilder 不起作用

java - 我们可以在 jdbcTemplate 更新中使用 IN 子句吗?

java - DropWizard 不使用 LogBack 并支持我的 log4j.properties