2012-12-18 31 views
6

ben uygulamada log4j ve yay güvenlik kullanıyorum ve logger her mesajda adı ile günlükleri yazmalı. Bunların hepsine çok yeniyim, birileri tavsiye ya da bağlantılar konusunda yardımcı olabilir mi? Belki bunu çözmek için bazı standart yollar var mı? Teşekkürler.Log4J yazma yay güvenlik kullanıcı adı

DÜZENLEME bahar çerçevesinin 3.1 Benim yay security.xml kullanma geçerli:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <http pattern="/favicon.ico" security="none" /> 
    <http auto-config="true"> 
      <intercept-url pattern="/**" access="ROLE_ADMIN"/> 
    </http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="detect_me" password="1111" authorities="ROLE_ADMIN" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

Ve log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>  
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d %p [%c] - %m%n" /> 
     </layout> 
    </appender> 
    <appender name="R" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="File" value="/logs/urlbuilderweb.log"/> 
     <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d %p %t %c - %m%n" />    
     </layout> 
    </appender> 
    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender"> 
     <param name="BufferSize" value="10000"/> 
     <appender-ref ref="R"/> 
    </appender> 
    <logger name="org.springframework"> 
     <level value="WARN"/> 
    </logger> 
    <logger name="org.directwebremoting"> 
     <level value="WARN"/> 
    </logger> 
    <logger name="org.apache.http"> 
     <level value="WARN"/> 
    </logger> 
    <logger name="org.hibernate"> 
     <level value="WARN"/> 
    </logger> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="ASYNC"/> 
    </root> 
</log4j:configuration> 

cevap

3

Sen NDC feature kullanabilirsiniz. Bazı filtre/engelleyici kurun (kullandığınız sunum teknolojisine göre değişir).

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>logDiagnosticContextFilter</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 

her ilgilenen log4j desenine x ekleyin::

public class LogDiagnosticContextFilter implements javax.servlet.Filter { 
    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     // do nothing 
    } 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
     ServletException { 
     SecurityContext context = SecurityContextHolder.getContext(); 
     if (context != null) { 
      Authentication authentication = context.getAuthentication(); 
      if (authentication != null) { 
       NDC.push("Username=" + authentication.getName()); 
      } 
     } 
     chain.doFilter(request, response); 
     NDC.pop(); 
    } 
    @Override 
    public void destroy() { 
     // do nothing 
    } 
} 

Bahar Güvenlik filtre zincirinin (web.xml) sonra infaz söz konusu filtreyi olun: iç içe tanı bağlamı (filtre örneği) ekleyin

%x %d %p %t %c - %m%n 

Daha sonra

çağırdığınızda
LOGGER.info("some text"); 

size daha fazla saklamak yerine, (a) sağlayan NDC`, `olmadığı kadar` MDC` kullanılmasını öneriyoruz Bugünlerde sizin günlüğüne

+2

yılında

Username=corresponding_login some text 

göreceksiniz kodu her yerde bir değer (bu, isim/değer çiftlerinin bir haritası) ve (b) çocuk dizileri tarafından miras alınır. –

+0

Bu çalışır! Çok teşekkür ederim. Gerçekten teşekkürler. – me1111

+0

2 yıl sonra. NDC.push(); 'NDC.push();' çağrılmasa bile çağrılır. –

İlgili konular