在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>