在SpringFrame工作中进行日志记录的首选方法
时间:2020-03-06 14:34:37 来源:igfitidea点击:
我进行了一些搜索,以查找有关如何使用Spring Framework进行日志记录的信息。
当前,我们有一个除了system.out语句外都没有登录的应用程序(非常糟糕的方式)。
我想做的是添加日志记录,但是还希望能够在运行时使用JMX来控制日志记录。
我们正在使用Rad 7.0 / WebSphere 6.1
我很有趣地找出实现此目的的最佳方法是什么(我认为可能有几种方法)。
更新:关于以下Spring AOP Logging的想法理想与否。这是参考此处在日志记录中发布的一个问题:条件日志记录。这会改善情况还是在伐木领域变得更加困难?
解决方案
我将使用Commons Logging和Log4j。对于Spring来说,这并不是一个真正的问题,但是Springframework源代码也确实使用了Commons Logging。如果我们在log4j中创建一个log4j记录器和添加器,则也可以在Springframework类中启用日志记录。有几种方法可以在运行时控制日志记录。 Log4j沙箱具有一个JSP,我们可以将其放入Web应用程序中,从而可以控制应用程序中所有记录器的日志级别。
这是用于为控制台和文件记录器配置log4j的示例文件。如果此文件位于类路径中,它将由log4j自动读取。但是,由于我们位于应用服务器中,因此可能还有另一种首选的配置日志记录方式。我记得在JBoss内部有一个我们必须修改的xml文件。不确定Websphere配置。但是,如果我们想为一个简单的测试应用程序配置它,这将助我们一臂之力。
# Set root logger level to WARN and appenders to A1 & F1. log4j.rootLogger=WARN, A1, F1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # logging to console only INFO log4j.appender.A1.Threshold=INFO # F1 is a file appender log4j.appender.F1=org.apache.log4j.RollingFileAppender # Tell Spring to be quiet log4j.logger.org.springframework=WARN # debug logging for my classes log4j.logger.com.yourcorp=DEBUG log4j.logger.org.hibernate=INFO # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r : %d{HH:mm:ss,SSS} [%t] %-5p %c{1} %x - %m%n log4j.appender.F1.File=./log/mylogfile.log log4j.appender.F1.MaxFileSize=10MB log4j.appender.F1.MaxBackupIndex=5 log4j.appender.F1.layout=org.apache.log4j.PatternLayout log4j.appender.F1.layout.ConversionPattern=%-4r : %d{HH:mm:ss,SSS} [%t] %-5p %c{1} %x - %m%n
请参阅其他答案以获取log4j。但也可以考虑使用JAMon进行应用程序监视。添加到Spring应用程序非常容易,例如:
<bean id="performanceMonitor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor"> <property name="useDynamicLogger" value="false"/> <property name="trackAllInvocations" value="true"/> </bean> <bean id="txRequired" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes" > <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> <property name="preInterceptors"> <list> <ref bean="performanceMonitor"/> </list> </property> </bean>