对于我的应用程序,我希望每个日志级别都有几个PrintStream
或PrintWriter
个实例,例如: INFO
,DEBUG
,ERROR
等等。
给予流的文本应该是:
我想在所有行前加一个时间戳。 (我已经完成了获取时间戳字符串的代码)
还应该可以将此实例赋予异常:ex.printStackTrace( ApplicationLog.ERROR );
我已经尝试过扩展PrintWriter
的课程:
package cf.randers.nev.log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import cf.randers.nev.helper.LogHelper;
public class CustomOutStream extends PrintWriter {
public String loglevel;
public boolean isBad;
public CustomOutStream(String loglevel, File file, boolean isBad) throws FileNotFoundException {
super(file);
this.loglevel = loglevel;
this.isBad = isBad;
System.out.println("Created printstream: " + loglevel + " isBad: " + Boolean.toString(isBad));
}
@Override
public void write(char[] buf, int off, int len) {
String prefix = LogHelper.getCurrentTime();
len = len + prefix.length() + this.loglevel.length();
StringBuilder b = new StringBuilder(len);
b.append(prefix);
b.append(this.loglevel);
b.append(buf);
if (!this.isBad) {
System.out.println(b.toString());
} else {
System.err.println(b.toString());
}
super.write(b.toString().toCharArray(), off, len);
}
}
这不幸地不起作用。我对我的代码进行了一些调试,结果发现这个方法甚至没有被调用。
答案 0 :(得分:1)
使用logback作为框架,设置执行该操作的记录器非常容易:
/src/main/java/
(位于import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
public static Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
public static void main(String[] args) {
LOGGER.debug("Enter debug message here.");
}
}
)
logback.xml
/src/main/resources/
(位于<configuration>
<timestamp key="bySecond" datePattern="yyyy-MM-dd kk-mm-ss" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] [%-5level/%logger{36}] %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/log-${bySecond}.log</file>
<append>false</append>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] [%-5level/%logger{36}] %msg%n</pattern>
<immediateFlush>true</immediateFlush>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
)
logs
此配置打印出{{1}}中记录到时间戳文件的所有内容,并很好地为所有消息添加前缀。