写后台java 的,应该没有不认识log4j 的了。
网上的配置方案也一大把,基本配置就不讲了.
这里讲一些log4j 一些小技巧。
首先,关于logger 的命名,
我们习惯是这样的,
static Logger log = Logger.getLogger(HelloWorld.class);
log4j.xml里面也不用怎么配置了,加上下面这行,那,日志都会直接打到 stdout里面了.
<root>
<level value="info" />
<appender-ref ref="stdout" />
</root>
但是,如果我们有这样一个需求,我要一个Logger 内容直接打到一个文件。要怎么弄呢?
这个很简单,需要修改两个地方,一个是java代码,一个是log4j.xml
logger的名字定为 mylog
static Logger log = Logger.getLogger("mylog");
public static void main(String[] args) {
Cat c = new Cat("keyboard");
log.info("这是log4j");
System.out.println("hello," + c.getName());
}
log4j.xml增加:
<appender name="business"
class="org.apache.log4j.RollingFileAppender">
<param name="File" value="d:/business.log" />
<param name="MaxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<logger name="mylog" additivity="false">
<level class="org.apache.log4j.Level" value="DEBUG"/>
<appender-ref ref="business"/>
</logger>
上面两个”mylog” 联系起来。
说明:log4j.properties的配置也是一样的,可以自己去打properties关于apperder和Logger 的配置规则
log4j简单编程
一提到log4j, 大家都会想到配置,其实,log4j也可以直接写代码来把配置搞好的。
写代码实现log4j的配置,在一些场景是非常实用的,比如,系统有多个维度去处理事情,你想把每一个维度各用一个文件放日志。
直接看代码:
import org.apache.log4j.Layout;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
public class LogCommon2 {
/**
* 把日志路径给填充好
*
* @param currentBusiCode
* @param taskLog
*/
public static void fillLogger(String currentBusiCode, Logger taskLog) {
try {
String foldPath = "D:/";
Layout layout = new PatternLayout("%d %p [%c][%t] - %m%n");
//定义日志路径
String taskLogPath = foldPath + "/stalog/"+ currentBusiCode + ".log";
//定 fileAppender,用于输出日志
RollingFileAppender taskAppender = new RollingFileAppender(layout, taskLogPath);
taskAppender.setMaxFileSize("1MB");
taskAppender.setMaxBackupIndex(10);
taskAppender.setName("fa");// fa是随便取的,同下面用来判断的fa,
//已经存在了,就不处理了,这里的判断是用来 防止多次append,多次append会打印多次
if(taskLog.getAppender("fa")==null){
taskLog.addAppender(taskAppender);
// ConsoleAppender c = new ConsoleAppender(); //同时也可加到console
// c.setLayout(layout);
// taskLog.addAppender(c);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面是个comm 类,只依赖了log4j类库,使用时如下
static Logger log = Logger.getLogger("no");
public static void main(String[] args) {
Cat c = new Cat("keyboard");
LogCommon2.fillLogger("hello",log);
log.info("这是log4j");
System.out.println("hello," + c.getName());
}
然后你就会发现d:/stalog/hello.log中的内容:
2017-02-27 21:19:19,692 INFO [no][main] - 这是log4j
上面即log4j的简单编程,log4j的配置会变得很少。
好的日志结构能让开发人员快速查询到问题,对维护非常友好。
同时,系统的部分有价值的日志 以结构化的方式存储,是数据分析的重要数据来源,老板就看这些数据分析来做决策了,做好了,升职加薪就靠它了 >_<