jboss日志输出详解

2024-05-16 11:08
文章标签 输出 日志 详解 jboss

本文主要是介绍jboss日志输出详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果不进行优化配置,JBOSS下的项目查错将非常麻烦,在JBOSS4.2.2GA版本中,默认将所有的DEBUG信息都输了个遍,刚运行JBOSS,Server.log的日志就差不多1M了,再停掉JBOSS,什么正事都没做,都己经生成看不到的LOG了,只能用一个字来形容:费物!

  不过话先别说得这么激,年轻人,应该控制好自己的心态,冲动是魔兽咧!LOG太多确实一点用也没有,本来这些LOG最大的功能是方便查错的,但如果生成N行的LOG,从中找到你想要的,我还不如把程序检查一遍算了!因此,在不同的应用场合下,配置好你的LOG,才能让项目更加顺利地进行哦!
  好了,转入正题,本文针对的是JBOSS4的LOG4J配置,其它的请参阅相应的文章。
  JBOSS4的LOG4J配置默认放在Deploy目录的conf/目录下,比如现在我将ear放到jboss的default目录下,那么log4j的文件就是jboss/server/default/conf/jboss-log4j.xml,找到它,我们再分析一下它里面的内容吧。
  首先是第一段,一个FILE的appender,代码如下
Xml代码 复制代码

<!-- A time/date based rolling appender -->  <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>  <param name="File" value="${jboss.server.log.dir}/server.log"/>  <param name="Append" value="false"/>  <!-- Rollover at midnight each day -->  <param name="DatePattern" value="'.'yyyy-MM-dd"/>  <!-- Rollover at the top of each hour   <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>  -->  <layout class="org.apache.log4j.PatternLayout">  <!-- The default pattern: Date Priority [Category] Message/n -->  <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>  <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message/n   <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>  -->  </layout>  </appender>  
[xml] view plain copy
<!-- A time/date based rolling appender -->  <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>  <param name="File" value="${jboss.server.log.dir}/server.log"/>  <param name="Append" value="false"/>  <!-- Rollover at midnight each day -->  <param name="DatePattern" value="'.'yyyy-MM-dd"/>  <!-- Rollover at the top of each hour  <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>  -->  <layout class="org.apache.log4j.PatternLayout">  <!-- The default pattern: Date Priority [Category] Message/n -->  <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>  <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message/n  <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>  -->  </layout>  </appender>  

上面这一段就是JBOSS默认输出到log/server.log文件的基本配置,它的name是FILE,这是自己定的,在其它地方会用这引name引用到它,然后appender的类型是DailyRollingFileAppender,意思是每天生成一个新的server.log文件,此时有人就会问,怎么每天都是server.log,那么昨天的岂不覆盖掉了?别担心,这种事情开发者早就想到了,它里面会有一些参数去设置它,自动让你前一天的log改其它名,当然appender的类型还有好几种,本文最后面有参考,根据你的项目的需要去设置它。
  中间第一个参数是log文件的输出地址,大家明白的了,改动一下就行了。
  第二个参数,意思是运行jboss时,要不要覆盖之前的log,这在开发调试时很有用,你设成false后,每次你重新运行jboss,新生成的log都覆盖了旧的,这样找起来比较方便,也不用自己专门去删除它,但如果是正式使用了,可以根据需要将成设成true,这样所有的日志都会被保存起来了,隔一段时间,你就可以找到之前任一时候的log信息哦。
  上面讲到了有一些参数设置文件换前一天的log的文件名的,大家可以注意到配置的中间有个DatePattern,这个就是设置你前一天的log将会被改成什么名,它在每天晚上的午夜进行,很自动吧,你看它后面的’.’yyyy-MM-dd,你就会知道前一天的log的文件名将会被换成什么样的了!这里不进行填鸭!它还可以表现得更狠一下,每小时生成一个log怎么样,你想怎么样就怎么样,学学去配它吧。
  再往下,有一个PatternLayout,这个是输出文本的样式,这个是文本的,不过它还有得换哦,可以换成网页形式的日志(看起来会爽点),还有另外几个,大家有空可以玩玩,不过这个PatternLayout是最常用,也是最专业的,想成为专业人士,就用它吧!呵呵,开玩笑的,其它几个也很专业,甚至更专业!
  刚接触log4j的人会不太理解PatternLayout的作用,不过你用过之后,就知它是多么强悍的了,日志显示的形式随你心意改变,可以输出很多信息,如类名,类行号,详细时间,日志正文,还有日志级别等,如果你自己开发一个log工具,你会做到这么强吗?我以前做过一个,只能硬编码,其它什么都不能干,用了它,准会把你气死一半。我就气了三分之一,因为我写的嘛,呵呵,亲生的,不能什么都怪它,那怪谁。。。
  再往下有个ConversionPattern的参数,它是配置log的显示格式的,它的详细格式使用在本文后面会贴出,有需要就去看看,不过用它默认的都挺好的了。
  好了,之前介绍了一个默认的FILE Appender,还有一个CONSOLE的Appender,不用介绍了吧,就是显示在jboss控制台的日志样式,在此我们就不详谈了。
  徐了这两个默认的,还可以自定义Appender哦,比如你项目有不同类型的日志输出到不同的log日志中,或者你不想改动默认的log配置,另找高明,反正就是很个性化啦,生成多少个不同的log都行!
  在这里我拷贝了一个FILE的的appender,然后作了小小改动,就可以生成我自定义的log了,代码如下
Xml代码 复制代码

<!-- A time/date based rolling appender -->  
<appender name="MYAPPENDER" class="org.jboss.logging.appender.DailyRollingFileAppender">  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>  <param name="File" value="${jboss.server.log.dir}/mylog.log"/>  <param name="Append" value="false"/>  <!-- Rollover at midnight each day -->  <param name="DatePattern" value="'.'yyyy-MM-dd"/>  <!-- Rollover at the top of each hour   <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>  -->  <layout class="org.apache.log4j.PatternLayout">  <!-- The default pattern: Date Priority [Category] Message/n -->  <!--<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>-->  <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message/n-->  <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>  </layout>  
</appender>  
[xml] view plain copy
<!-- A time/date based rolling appender -->  
<appender name="MYAPPENDER" class="org.jboss.logging.appender.DailyRollingFileAppender">  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>  <param name="File" value="${jboss.server.log.dir}/mylog.log"/>  <param name="Append" value="false"/>  <!-- Rollover at midnight each day -->  <param name="DatePattern" value="'.'yyyy-MM-dd"/>  <!-- Rollover at the top of each hour  <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>  -->  <layout class="org.apache.log4j.PatternLayout">  <!-- The default pattern: Date Priority [Category] Message/n -->  <!--<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>-->  <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message/n-->  <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>  </layout>  
</appender>  

  它将会在log目录生成一个mylog.log文件,不过有一点需要注意,在没有其它代码引用这些appender之前,它什么也不会干的,怎么引用还得往下看。
在jboss-log4j.xml文件里靠下的地方,有很多下面这类代码
Xml代码 复制代码

<!-- Limit the org.jboss category to INFO as its DEBUG is verbose -->  
<category name="org.jboss">  <priority value="INFO" />  
</category>  
[xml] view plain copy
<!-- Limit the org.jboss category to INFO as its DEBUG is verbose -->  
<category name="org.jboss">  <priority value="INFO" />  
</category>  

它是干嘛用的?它就是log4j的强悍之一,它检测到是org.jboss输出的信息的话,就限制DEBUG的信息输出,之前说过jboss的log信息超多,因为它默认将所有Debug信息都输出来了,这些jboss的debug信息对于我们这些平民百姓来说,没啥用,你加上我上面这一段,所有的JBOSS DEBUG信息都不会输出来的了,试试吧,其它的category你怎么改?讲一个我的经验给你们吧,你运行过jboss,然后停掉它,打开server.log,会看到很多的log信息,像下面这种
2008-10-18 16:00:59,203 DEBUG[org.apache.resource.deployment.RARDeployment] Required license terms exist, view META-INF/ra.xml in …/deploy/jboss-ha-local-jdbc.rar
看上面粗体部份,它是由类org.apache.resource.deployment.RARDeployment产生的log,你如果看到很多,你觉得没用,又或者你看到是DEBUG信息,你也不想要,就写一段category吧,将类的前面部分截取一段,写进category的name属性里,比如上面这类log,你不想看到它,你就这样写

Xml代码 复制代码

<category name="org.apache">  <priority value="INFO" />  
</category>  
[xml] view plain copy
<!-- Limit the org.apache category to INFO as its DEBUG is verbose -->  
<category name="org.apache">  <priority value="INFO" />  
</category>  

这样所有org.apache属下的类的debug log都不会再输出来了,你还可以更狠一点,写下面这段
Xml代码 复制代码

<category name="org.apache">  <priority value="ERROR" />  
</category>  
[xml] view plain copy
<category name="org.apache">  <priority value="ERROR" />  
</category>  

这样org.apache下的普通INFO信息也不会输出了,只有错误的信息才会被输出!
  至于其它的log信息,你就运行多几次jboss,每次根据server.log,找到你不想要的,再加多一些category,这样你的server.log就会变得非常精简的了,试试吧,一劳永逸,以后log就有得控制了,调试查错也更方便了。
  到了这里,事情还没完呢,最后一点了。
  之前我们自定义了一个appender,我们要用它来输出自己的项目的log,我们只是定义好了这个appender,还没用上它,它暂时还是不会起作用的(它会生成文件,但是没log往里面写),项目的log,还是只会在server.log里出现,不会写进你自定义的log里。下面我们干最后一点,完成所有工作。
  写多一个category,name填上自己项目对应的,比如com.mycompany,然后在后面加多一行,如下

Xml代码 复制代码

<!-- Self Define Appender -->  <category name="com.mycompany">  <priority value="INFO" />  <appender-ref ref="MYAPPENDER"/>  </category>  
[xml] view plain copy
<!-- Self Define Appender -->  <category name="com.mycompany">  <priority value="INFO" />  <appender-ref ref="MYAPPENDER"/>  </category>  

配置好了,下面贴一段代码中使用log的代码中,怎么用不讲了,很简单的,
Java代码 复制代码

public class TestLog4j   
{   public static void main(String[] args)    {   Logger logger = Logger.getLogger(TestLog4j. class);   logger.debug( " debug " );   logger.error( " error " );   logger.info("info");   }    
}   
[java] view plain copy
public class TestLog4j  
{  public static void main(String[] args)   {  Logger logger = Logger.getLogger(TestLog4j. class);  logger.debug( " debug " );  logger.error( " error " );  logger.info("info");  }   
}   

下面,贴出一些常用的配置参考文档

1\日志输出级别,共有5级:

FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7

2\Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3\Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

4\Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.Java: 10 )

转自:http://blog.csdn.net/sdd00001/article/details/18319647

这篇关于jboss日志输出详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994733

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作