上一篇讲了如何配置log4j,但是都是固定的输出方式,如果我们想要动态的改变输入方式该怎么办呢?
比如我们有一个网络游戏在测试阶段,而这个游戏中玩家是以房间的形式组合在一起,这时我们如果想要测试房间内的逻辑是否正常,输出log的话都会存放在同一个日志文件内,如果遇到bug想要找起来非常困难,所以我们需要对每一个房间生成一个独立的log文件来进行保存。
代码:
public static Logger getLoggerByName(String name,String type) {
// 创建logger,如果已存在则返回现有的
Logger logger = Logger.getLogger(name);
// 清空Appender。
logger.removeAllAppenders();
// log级别。
logger.setLevel(Level.DEBUG);
// 生成新的Appender
FileAppender appender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
// log的输出形式
// %c - the category 类
// %d - the date 日期
// Date format: The date format character may be followed by a date format specifier enclosed between braces. For example, %d{%H:%M:%S,%l} or %d{%d %m %Y %H:%M:%S,%l}. If no date format specifier is given then the following format is used: "Wed Jan 02 02:03:55 1980". The date format specifier admits the same syntax as the ANSI C function strftime, with 1 addition. The addition is the specifier %l for milliseconds, padded with zeros to make 3 digits.
// %m - the message 消息
// %n - the platform specific line separator 换行
// %p - the priority 优先级
// %r - milliseconds since this layout was created. 从创建到现在的毫秒数
// %R - seconds since Jan 1, 1970 时间戳
// %u - clock ticks since process start 进程开始到现在的时间
// %x - the NDC
String conversionPattern = "%m%n";
layout.setConversionPattern(conversionPattern);
appender.setLayout(layout);
// log输出路径
appender.setFile( "./log/" + type + "/" + name + ".log");
// log的文字码
appender.setEncoding("UTF-8");
// true:在已存在log文件后面追加 false:新log覆盖以前的log
appender.setAppend(true);
// 适用当前配置
appender.activateOptions();
// 将新的Appender加到Logger中
logger.addAppender(appender);
return logger;
}
该方法2个参数:name 为文件名,type为log下的文件夹名。
测试一下:
public static void main( String[] args )
{
Logger test1 = getLoggerByName("test1", "room");
test1.info("test1 msg1");
test1.info("test1 msg2");
test1.info("test1 msg3");
Logger test2 = getLoggerByName("test2", "room");
test2.info("test2 msg1");
test2.info("test2 msg2");
test2.info("test2 msg3");
}
运行程序后,我们可以在控制台看到输出:
并且可以在log文件夹中看到日志文件: