Java日志-Log4J2
2015年11月9日
默认可以获取root日志对象,只能输出error级别日志输出到控制台。
packagelee;
importorg.apache.logging.log4j.LogManager;
importorg.apache.logging.log4j.Logger;
publicclass Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Logger logger =LogManager.getLogger();
logger.error("this iserror.");
}
}
目标:配置输出方式,输出格式,内容等。
原理:配置输出方式及格式占位符。
方法:
log4j2是对log4j的升级(log4j1.x于2012停止更新),多线程下性能提高是1.x的10倍,单线程也有轻微提高。
参考:http://blog.csdn.net/lrenjun/article/details/8178875
http://blog.csdn.net/memray/article/details/17488433
默认的加载顺序为:
classpath下名为log4j-test.json 或者log4j-test.jsn文件
classpath下名为 log4j2-test.xml
classpath下名为log4j.json 或者log4j.jsn文件
classpath下名为 log4j2.xml
控制台:Console。
文件:File。
循环文件:RollingFile。
示例:
<?xmlversion="1.0" encoding="UTF-8"?>
<configuration>
<appenders></appenders>
<loggers></loggers>
</configuration>
目标:控制输出的位置、文件格式等。
参考:http://logging.apache.org/log4j/2.x/manual/appenders.html
名称name:用于logger指定。
目标target:指定输出的控制台流,SYSTEM_OUT或SYSTEM_ERR(默认)。
输出格式layout:可以指定patternlayout等。
<?xmlversion="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console"target="SYSTEM_OUT">
<PatternLayoutpattern="msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyy MMM dd HH:mm:ss,SSS}%n"/>
</Console>
</Appenders>
<Loggers>
<root>
<appender-refref="console"></appender-ref>
</root>
</Loggers>
</Configuration>
文件名:fileName;
文件名模式:占位符。
追加性:append。
大小控制:使用polices控制,可以按时间(TimeBasedTriggeringPolicy)或大小(SizeBasedTriggeringPolicy)分割。
数量控制策略:使用Strategy控制,可以指定最小,大数量min,max。
文件压缩:如果文件超过指定时间或大小,则进行压缩后存储,存储于filePattern中。数量受数据控制策略影响。
filePattern格式:$${ 格式:占位符},patternlayout格式和%i(表示第几个)。
示例:
<?xmlversion="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console"target="SYSTEM_OUT">
<PatternLayout
pattern="msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyyMMM dd HH:mm:ss,SSS}%n" />
</Console>
<RollingFile name="rolling" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.}[%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicysize="20 KB" />
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
</Appenders>
<Loggers>
<root>
<appender-refref="rolling"></appender-ref>
</root>
</Loggers>
</Configuration>
时间间隔:<TimeBasedTriggeringPolicy/>中设置interval,单位为天,默认为1。
示例:按天,按大小自动滚动
<?xmlversion="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console"target="SYSTEM_OUT">
<PatternLayout
pattern="msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyyMMM dd HH:mm:ss,SSS}%n" />
</Console>
<RollingFile name="rolling"fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.}[%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicysize="20 KB" />
</Policies>
<DefaultRolloverStrategymax="4"/>
</RollingFile>
</Appenders>
<Loggers>
<root>
<appender-refref="rolling"></appender-ref>
</root>
</Loggers>
</Configuration>
使用AppenderRef引用其它的输出目标。
<Async name="asynclog">
<AppenderRefref="dailyrolling" />
</Async>
示例:
<loggername="com.relin.HelloLog4j" level="error"additivity="false">
<appender-refref="Console"/>
</logger>
原理:使用%占位符控制格式。
占位符:类C,方法M,级别level,logger名称(c),日期时间d,文件F,行号L,线程t,信息m,换行n。
日期时间:%d{yyyy MMM dd HH:mm:ss,SSS}输出2015 Nov 10 11:34:34,872
参考:https://logging.apache.org/log4j/2.x/manual/layouts.html
示例:
<File name="log"fileName="target/test.log" append="false">
<PatternLayoutpattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M -%msg%xEx%n"/>
</File>
示例:
LoggermyLogger=LogManager.getLogger("com.test.loggerxx");
myLogger.info(“this is info log.”);
//log4j2.xml
<?xmlversion="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console"target="SYSTEM_OUT">
<PatternLayout
pattern="msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyyMMM dd HH:mm:ss,SSS}%n" />
</Console>
<RollingFilename="dailyrolling" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>msg=%m~File=%F~Line=%L~Method=%M~Console~%d{yyyyMMM dd HH:mm:ss,SSS}%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicysize="20 MB" />
</Policies>
<DefaultRolloverStrategy max="10" />
</RollingFile>
<Async name="asynclog">
<AppenderRefref="dailyrolling" />
</Async>
</Appenders>
<Loggers>
<root>
<appender-refref="console"></appender-ref>
</root>
<logger name="lee.log"additivity="false" level="all">
<appender-refref="asynclog"></appender-ref>
</logger>
</Loggers>
</Configuration>
//Main.java
packagelee;
importorg.apache.logging.log4j.LogManager;
importorg.apache.logging.log4j.Logger;
publicclass Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Logger logger =LogManager.getLogger("lee.log");
logger.trace("this istrace.");
logger.debug("this isdebug.");
logger.info("this isinfo.");
logger.warn("this iswarn.");
logger.error("this iserror.");
logger.fatal("this isfatal.");
System.out.println("finished.");
}
}