Java日志-Log4J2

Java日志-Log4J2

sf2gis@163.com

2015年11月9日

 

1 目标:日志信息指定输出格式、位置,并可在运行时控制开关,可能输出滚动文件。

2 原理:通过XML读取配置文件。根据配置生成不同的对象,每个对象都有不同的输出方式和输出格式。

3 流程:安装库,配置日志,输出日志。

3.1 安装库:下载log4j2,解压后将log4j-api-2.4.1.jar和log4j-core-2.4.1.jar复制到工程目录并添加到classpath。

3.2 配置日志:忽略。

默认可以获取root日志对象,只能输出error级别日志输出到控制台。

3.3 输出日志:使用LoggerMagager获取默认日志对象。

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.");

      }

 

}

4 方法:配置、使用。

目标:配置输出方式,输出格式,内容等。

原理:配置输出方式及格式占位符。

方法:

log4j2是对log4j的升级(log4j1.x于2012停止更新),多线程下性能提高是1.x的10倍,单线程也有轻微提高。

参考:http://blog.csdn.net/lrenjun/article/details/8178875

http://blog.csdn.net/memray/article/details/17488433

4.1 文件加载:指定位置,指定文件名

默认的加载顺序为:

classpath下名为log4j-test.json 或者log4j-test.jsn文件

classpath下名为 log4j2-test.xml

classpath下名为log4j.json 或者log4j.jsn文件

classpath下名为 log4j2.xml

4.2 组织方式:Configuration-》Appenders、Loggers

4.2.1根节点Configuration。

4.2.2输出目标节点Appenders:定义输出目标,可以定义多个输出目标。

控制台:Console。

文件:File。

循环文件:RollingFile。

4.2.3日志对象节点Loggers。

示例:

<?xmlversion="1.0" encoding="UTF-8"?>

<configuration>

      <appenders></appenders>

      <loggers></loggers>

</configuration>

4.3 日志格式:输出方式appenders

目标:控制输出的位置、文件格式等。

参考:http://logging.apache.org/log4j/2.x/manual/appenders.html

4.3.1输出目标:包含控制台Console,文件File,滚动文件RollingFile等。

4.3.1.1  控制台Console:属性name,target,layout。

名称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>

4.3.1.2  卷动文件RollingFile:按大小自动生成一系统文件,并循环生成。

文件名: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>

4.3.1.3  按日滚动文件DaylyRollingFile:按大小自动生成一系统文件,并循环生成。

时间间隔:<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>

4.3.1.4  异步输出:单独的线程输出日志。

使用AppenderRef引用其它的输出目标。

       <Async name="asynclog">

             <AppenderRefref="dailyrolling" />

       </Async>

4.4 日志格式:日志对象loggers。默认为root(level=error)。

4.4.1目标:控制输出的日志字符串格式及指定输出方式。

4.4.2方法:

4.4.2.1  名称name:指定日志对象的名称,用于继承控制和程序获取对象。名称具有继承性,按照.进行分级。如:com.lee的子节点是com.lee.a。
4.4.2.2  输出级别level:过滤日志,只有高于或等于此级别的日志才能输出。all<trace<debug<info<warn<error(默认)<fatal<off。

4.4.2.3  叠加性additivity:如果为true,则沿继承树向父级传递;如果为false,则停止传播。
4.4.2.4  输出方式:Appender-ref指定输出输出方式的name。

示例:

<loggername="com.relin.HelloLog4j" level="error"additivity="false"> 

<appender-refref="Console"/> 

</logger>

4.4.3输出格式:PatternLayout,输出日志信息的内容和格式配置。

原理:使用%占位符控制格式。

占位符:类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> 

4.5 输出日志:使用程序输出日志

4.5.1日志管理对象:LogManager,管理日志对象组织和其它选项。

4.5.2日志对象:Logger,控制日志的输出等。

示例:

LoggermyLogger=LogManager.getLogger("com.test.loggerxx");

myLogger.info(“this is info log.”);

5 示例:按天、固定大小20MB,越过则自动压缩存储,最多10个压缩文件,异步多线程日志

//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.");

      }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值