pattern 的参数如下:ConversionPattern参数的格式含义
格式 名 | 含义 |
%C | 输出日志信息所属的类的全名 |
%d | 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式, 比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 ; 比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}. |
%F | 输出日志信息所属的类的类名 |
%L | 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 |
%m | 输出代码中指定的信息,如log(message)中的message |
%M | 输出日志信息中所发生的方法名。 |
%n | 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” |
%p | 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 |
%r | 输出自应用启动到输出该日志信息所耗费的毫秒数 |
%t | 输出产生该日志事件的线程名 |
四、示例
loggers下面会定义许多个logger,这些logger通过name进行区分,来对不同的logger配置不同的输出,方法是通过引用定义的appender,注意,appender-ref引用的值是上面每个appender的name,而不是节点名称。
logger的name的机制:
我们这里看到了配置文件里面是name很重要,没错,这个name可不能随便起(其实可以随便起)。这个机制意思很简单。就是类似于Java package一样,比如我们的一个包:cn.base.logs.。而且,可以发现我们前面生成Logger对象的时候,命名都是通过 Hello.class.getName(); 这样的方法,为什么要这样呢? 很简单,因为有所谓的Logger 继承的问题。比如 如果你给cn.base定义了一个logger,那么他也适用于cn.base.logs这个logger。名称的继承是通过点(.)分隔的。然后你可以猜测上面loggers里面有一个子节点不是logger而是root,而且这个root没有name属性。这个root相当于根节点。所有的logger都适用与这个logger,所以,即使你在很多类里面通过 类名.class.getName() 得到很多的logger,而且没有在配置文件的loggers下面做配置,他们也都能够输出,因为他们都继承了root的log配置。
示例解析:
上面的这个配置文件里面定义了一个logger,他的名称是 cn.base.logs.Hello ,这个名称其实就是通过Hello.class.getName(); (Java代码生成Logger对象时调用)得到的,我们为了给他单独做配置,就生成对于这个类的logger,上面的配置基本的意思是只有cn.base.logs.Hello 这个logger输出trace信息,也就是他的日志级别是trace,其他的logger则继承root的日志配置,日志级别是debug,只能打印出DEBUG及以上级别的日志。如果这里logger 的name属性改成cn.base,则这个包下面的所有logger都会继承这个log配置(这里的包是log4j的logger name的“包”的含义,不是java的包。但和java包结构相同)
Log4j2 官网
http://blog.csdn.net/lu8000/article/details/25754415