Commit 6c96bf07 by cjh

日志打印数据库需求 框架搭建

parent edda4758
......@@ -29,6 +29,7 @@ import org.sss.presentation.noui.context.NoUiContextManager;
import org.sss.presentation.noui.jwt.JWT;
import org.sss.presentation.noui.jwt.JwtLogin;
import org.sss.presentation.noui.jwt.RedisLoginInfo;
import org.sss.presentation.noui.log.aop.LogAnnotation;
import org.sss.presentation.noui.util.NoUiPresentationUtil;
import org.sss.presentation.noui.util.NumericUtil;
import org.sss.presentation.noui.util.RedisUtil;
......@@ -42,6 +43,7 @@ public class LoginController {
@Autowired
private NoUiVersion noUiVersion;
@LogAnnotation
@ResponseBody
@RequestMapping(value = "/login", method = RequestMethod.POST)
public Object login(@RequestBody Map<String, Object> dataMap, HttpServletRequest request, HttpSession session) {
......
package org.sss.presentation.noui.log;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Layout;
import org.apache.log4j.MDC;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
import org.sss.presentation.noui.common.Constants;
import org.sss.presentation.noui.log.aop.LogAop;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class SqlLogAppender extends AppenderSkeleton {
private PatternLayout patternLayout;
// protected String pattern;
protected static Map<String, List> map = new ConcurrentHashMap();
public Map<String,List> getMap(){
return map;
}
// public String getPattern() {
// return pattern;
// }
//
// public void setPattern(String pattern) {
// this.pattern = pattern;
// }
public PatternLayout getPatternLayout() {
return patternLayout;
}
public void setPatternLayout(PatternLayout patternLayout) {
this.patternLayout = patternLayout;
}
@Override
protected void append(LoggingEvent loggingEvent) {
String message = this.subAppend(loggingEvent);
String thread_name = (String) MDC.get(LogAop.THREAD_NAME);
if(thread_name == null)return;
if(map.containsKey(thread_name)){
map.get(thread_name).add(message);
}else{
List list = new ArrayList();
list.add(message);
map.put(thread_name,list);
}
}
public String subAppend(LoggingEvent event) {
// PatternLayout patternLayout = new PatternLayout();
// patternLayout.setConversionPattern(pattern);
// setLayout(patternLayout);
String result;
if(layout ==null){
result = event.getRenderedMessage();
}else{
result = layout.format(event);
StringBuffer buffer = new StringBuffer(result);
if(layout.ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if(s != null) {
int len = s.length;
for(int i = 0; i < len; ++i) {
buffer.append(s[i]);
buffer.append(Layout.LINE_SEP);
}
}
}
result = new String(buffer);
}
return result;
}
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
return false;
}
}
package org.sss.presentation.noui.log.aop;
import java.lang.annotation.*;
/**
* Created by cjh on 2019/12/12 0012.
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {
}
package org.sss.presentation.noui.log.aop;
import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import org.aspectj.lang.JoinPoint;
import org.sss.presentation.noui.log.SqlLogAppender;
import java.util.List;
import java.util.Map;
public class LogAop {
public final static String THREAD_NAME = "thread_name";
public void before(JoinPoint joinPoint){
MDC.put(THREAD_NAME,Thread.currentThread().getName());
}
public void after(JoinPoint joinPoint){
String thread_name = (String) MDC.get(THREAD_NAME);
MDC.clear();
//发送每笔交易的日志到MQ
SqlLogAppender sqlLogAppender = (SqlLogAppender) Logger.getRootLogger().getAppender("SqlLog");
if(sqlLogAppender != null){
Map<String, List> map = sqlLogAppender.getMap();
List<String> list = map.get(thread_name);
StringBuffer buffer = new StringBuffer();
if(list != null){
for(String str:list){
buffer.append(str);
}
}
map.remove(thread_name);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ERROR" />
<param name="Encoding" value="UTF-8" />
<param name="File" value="../logs/eibs.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
</layout>
<filter class="log.PatternFilter" >
<param name="Pattern" value="org.sss.*" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="TRACE" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%-10t][%c{1}] %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="ERROR" />
<param name="LevelMin" value="TRACE" />
</filter>
</appender>
<category name="org.sss">
<priority value="INFO" />
</category>
<category name="org.hibernate">
<priority value="ERROR" />
</category>
<category name="org.apache">
<priority value="ERROR" />
</category>
<category name="com.opensymphony">
<priority value="ERROR" />
</category>
<root>
<level value="WARN" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ERROR"/>
<param name="Encoding" value="UTF-8"/>
<param name="File" value="../logs/eibs.log"/>
<param name="Append" value="true"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
</layout>
</appender>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="TRACE"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%-10t][%c{1}] %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="ERROR"/>
<param name="LevelMin" value="TRACE"/>
</filter>
</appender>
<appender name="SqlLog" class="org.sss.presentation.noui.log.SqlLogAppender">
<param name="Threshold" value="ERROR"/>
<layout class="org.apache.log4j.PatternLayout" >
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
</layout>
</appender>
<category name="org.sss">
<priority value="INFO"/>
</category>
<category name="org.hibernate">
<priority value="ERROR"/>
</category>
<category name="org.apache">
<priority value="ERROR"/>
</category>
<category name="com.opensymphony">
<priority value="ERROR"/>
</category>
<root>
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="SqlLog"/>
</root>
</log4j:configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="log/eibs-designer.log">
<PatternLayout pattern="%d %-5p %C{2} [%t] %m%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="org.sss" level="DEBUG"/>
<Logger name="org.hibernate" level="ERROR"/>
<Logger name="org.apache" level="ERROR"/>
<Logger name="com.opensymphony" level="ERROR"/>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<mvc:annotation-driven />
......@@ -45,6 +46,15 @@
<property name="version" value="V1.0.0" />
</bean>
<bean id="logAop" class="org.sss.presentation.noui.log.aop.LogAop" />
<aop:config>
<aop:aspect id="handler" ref="logAop">
<aop:pointcut id="point" expression="execution(* org.sss.presentation.noui.controller..*(..)) &amp;&amp; @annotation(org.sss.presentation.noui.log.aop.LogAnnotation)" />
<aop:before method="before" pointcut-ref="point" />
<aop:after method="after" pointcut-ref="point" />
</aop:aspect>
</aop:config>
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="org.sss.presentation.noui.controller"></context:component-scan>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment