ssh里,如何使用代理记录日志
能给一段简单代码吗?

解决方案 »

  1.   

    # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
    # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
    log4j.rootLogger=ERROR, stdout, logfile# log4j.logger.com.tianbo=ERROR
    # log4j.logger.org.apache.commons=ERROR
    # log4j.logger.org.apache.struts=ERROR
    # log4j.logger.org.springframework=ERROR
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%p [%c] - <%m>%n# log4j.logger.org.hibernate=ERROR
    # log4j.appender.org.hibernate=org.apache.log4j.DailyRollingFileAppender
    # log4j.appender.org.hibernate.File =D:/phsama_ssh/webapp/phsama_sql.log  //改下
    # log4j.appender.org.hibernate.layout=org.apache.log4j.PatternLayout   
    # log4j.appender.org.hibernate.layout.ConversionPattern=%d [%t:%r] - [%p] %m%n log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=D:/sytbt/webapp/log/sytbt.log   //改下
    log4j.appender.logfile.MaxFileSize=512KB
    log4j.appender.logfile.MaxBackupIndex=3
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=[SYTBT] %d %p [%c] - %m%n你看能用不
      

  2.   


    package com.euse.proxy;import java.lang.reflect.*;public class TestHandle implements InvocationHandler {
    private TestInterface test;

    public TestInterface bind(TestInterface test) {
    this.test = test;

    TestInterface proxyTest = 
    (TestInterface)Proxy.newProxyInstance(
    test.getClass().getClassLoader(),
    test.getClass().getInterfaces(),
    this);

    return proxyTest;

    }

    public Object invoke(Object proxy,Method method,Object[] args)
    throws Throwable {
             if (method.getName().equals("print")) {
              System.out.println("TestHandle.print()");
              return null;
             }else {
              return method.invoke(test, args);
             }
        }


    }
      

  3.   

    aop方式实现的记录日志,在发生Exception时记录,要怎么写呢?
      

  4.   

    用aop来记录日志,以及一些公共的操作
    对于异常的记录,需要声明一下aop的异常通知,可以对所有异常发出通知,或者对特定异常的通知,spring的参考文档如下:6.2.4.3. 异常通知(After throwing advice)
    抛出异常通知在一个方法抛出异常后执行。使用@AfterThrowing注解来声明:import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.AfterThrowing;@Aspect
    public class AfterThrowingExample {  @AfterThrowing("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
      public void doRecoveryActions() {
        // ...
      }}
    你通常会想要限制通知只在某种特殊的异常被抛出的时候匹配,你还希望可以在通知体内得到被抛出的异常。 使用throwing属性不仅可以限制匹配的异常类型(如果你不想限制,请使用 Throwable作为异常类型),还可以将抛出的异常绑定到通知的一个参数上。 import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.AfterThrowing;@Aspect
    public class AfterThrowingExample {  @AfterThrowing(
        pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
        throwing="ex")
      public void doRecoveryActions(DataAccessException ex) {
        // ...
      }}
    在throwing属性中使用的名字必须与通知方法内的一个参数对应。 当一个方法因抛出一个异常而中止后,这个异常将会作为那个对应的参数送至通知方法。 throwing 子句也限制了只能匹配到抛出指定异常类型的方法 (上面的示例为DataAccessException)。