2012-12-18 19 views
6

मैं लॉग 4j और वसंत-सुरक्षा का उपयोग कर रहा हूं, और लॉगर को प्रत्येक संदेश में उपयोगकर्ता नाम के साथ लॉग लिखना चाहिए। मैं इन सबके लिए बहुत नया हूं, क्या कोई सलाह या लिंक में मदद कर सकता है? शायद इसे हल करने के कुछ सरल तरीके हैं? धन्यवाद।लॉग 4j लिखें वसंत-सुरक्षा उपयोगकर्ता नाम

संपादित वसंत ढांचे का उपयोग करते हुए 3.1 मेरे वसंत-security.xml है:

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

और 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> 

उत्तर

3

आप NDC feature उपयोग कर सकते हैं। कुछ फ़िल्टर/इंटरसेप्टर सेट करें (आपके द्वारा उपयोग की जाने वाली प्रस्तुति तकनीक पर निर्भर करता है)। नेस्टेड नैदानिक ​​संदर्भ (फिल्टर उदाहरण) जोड़ें:

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

सुनिश्चित करें कि फिल्टर स्प्रिंग सुरक्षा फिल्टर श्रृंखला (web.xml) के बाद मार डाला:

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

प्रत्येक रुचि log4j पैटर्न के लिए एक्स जोड़ें:

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

बाद में जब आप

फोन
LOGGER.info("some text"); 

आप कोड कहीं भी आप इन दिनों यह `MDC` उपयोग करने के लिए अनुशंसा की जाती है आपका लॉग

+2

में

Username=corresponding_login some text 

देखेंगे बल्कि' NDC' है, जो (क) की सुविधा देता है की तुलना में आप अधिक से अधिक की दुकान एक मान (यह नाम/मूल्य जोड़े का नक्शा है) और (बी) बाल धागे द्वारा विरासत में मिला है। –

+0

यह काम करता है! आपका बहुत बहुत धन्यवाद। वास्तव में धन्यवाद। – me1111

+0

2y बाद में। 'एनडीसी.pop(); 'एनडीसी.push();' कहा जाता है, भले ही कहा जाता है। –

संबंधित मुद्दे