代码拉取完成,页面将自动刷新
1.SpringMvc版本
1.引入日志组件
这里是在日志组件执行 mvn cleam install后再回引入进来
<!--日志组件-->
<dependency>
<groupId>com.caigaoqing.tech</groupId>
<artifactId>log-component</artifactId>
<version>1.3</version>
</dependency>
2.依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<java.encoding>UTF-8</java.encoding>
<!-- web版本-->
<org.springframework-version>4.1.1.RELEASE</org.springframework-version>
<!-- servlet-->
<servlet-api-version>3.0.1</servlet-api-version>
<aspectjrt-version>1.6.10</aspectjrt-version>
<aspectjweaver-version>1.7.2</aspectjweaver-version>
<slf4j-api-version>1.7.5</slf4j-api-version>
<slf4j-log4j12-version>1.7.5</slf4j-log4j12-version>
<log4j-version>1.2.17</log4j-version>
<commons-lang3-version>3.7</commons-lang3-version>
<lombok-version>1.16.20</lombok-version>
<fastjson-version>1.2.47</fastjson-version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api-version}</version>
<scope>provided</scope>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectjrt-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-log4j12-version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j-version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3-version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
3.配置切面 (log.xml)
需要改动下面加粗的部分
<aop:pointcut expression="execution(* com.caigaoqing.tech.log.controller..(..))" id="controllerLog"/>
<?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: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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- Controller 日志Aspect -->
<bean id="logAuditAspectBean" class="com.caigaoqing.tech.aspect.LogAuditAspect"></bean>
<aop:config>
<aop:aspect id="logAuditAspect" ref="logAuditAspectBean">
<aop:pointcut expression="execution(* com.caigaoqing.tech.log.controller.*.*(..))" id="controllerLog"/>
<aop:around method="doAround" pointcut-ref="controllerLog"/>
<!-- 前置通知 -->
<aop:before method="doBeforeInServiceLayer" pointcut-ref="controllerLog"/>
<!--后置通知 -->
<aop:after-returning method="doAfterInServiceLayer" pointcut-ref="controllerLog"/>
<!--环绕通知 -->
<aop:around method="doAround" pointcut-ref="controllerLog"/>
<!--异常通知 -->
<aop:after-throwing method="printExLog" pointcut-ref="controllerLog" throwing="e"/>
</aop:aspect>
</aop:config>
</beans>
4.加入到IOC中
这个配置文件一定要放到web加载到能扫描的地方
<!-- Spring中引入其他配置文件 -->
<import resource="classpath*:log.xml" />
5.实现用户信息接口
这是由于分布式前后台分离一般不会在head或者业务数据中添加业务id,session一般都不使用,所以一般系统会采用token,实现这个接口getUserIdByToken是获取用户id,可自定义扩展就行,大概是这个以上。
import com.sharecharger.tech.log.api.UserInfoApi;
import org.springframework.stereotype.Service;
/**
* @author 蔡高情
* @Title: UserInfoServcieImpl
* @ProjectName
* @Description:
* @date 2018/8/7 000716:46
*/
@Service
public class UserInfoServcieImpl implements UserInfoApi {
@Override
public String getUserIdByToken(String token) {
return "123";
}
}
5.配置log打印
总的xml,下面会分析主要功能
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<!--日志组件打印log的格式-->
<Property name="patternLayout">[%d{yyyy-MM-dd HH:mm:ss}][%-0p]%msg%n</Property>
<!--日志组件打印log的名字,路径是logs下面 可以自行修改打印到共享存储中-->
<Property name="logName">demo</Property>
</Properties>
<Appenders>
<console name="LogConsole" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="${patternLayout}"/>
</console>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
<File name="log" fileName="logs/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="/home/elk/soft/logs/log.log"
filePattern="/home/elk/soft/logs/log-$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="logs/warn.log"
filePattern="logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<RollingFile name="RollingFileError" fileName="logs/error.log"
filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!--demo log单独打印-->
<RollingFile name="importDataLog" fileName="logs/${logName}.log"
filePattern="logs/$${date:yyyy-MM}/${logName}-%d{yyyy-MM-dd}-%i.log" append="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${patternLayout}"/>
<!--<SizeBasedTriggeringPolicy size="1MB"/>-->
<DefaultRolloverStrategy max="10"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
<logger name="com.caigaoqing.tech.aspect.LogAuditAspect" level="all" additivity="false">
<appender-ref ref="importDataLog"></appender-ref>
<appender-ref ref="LogConsole"></appender-ref>
</logger>
<logger name="com.example.demo.service.LoggerTest" level="all" additivity="false">
<appender-ref ref="RollingFileInfo"></appender-ref>
</logger>
</Loggers>
</Configuration>
定义log打印的位置,样式,名字
<Properties>
<!--日志组件打印log的格式-->
<Property name="patternLayout">[%d{yyyy-MM-dd HH:mm:ss}][%-0p]%msg%n</Property>
<!--日志组件打印log的名字,路径是logs下面 可以自行修改打印到共享存储中-->
<Property name="logName">demo</Property>
</Properties>
<RollingFile name="importDataLog" fileName="logs/${logName}.log"
filePattern="logs/$${date:yyyy-MM}/${logName}-%d{yyyy-MM-dd}-%i.log" append="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${patternLayout}"/>
<!--<SizeBasedTriggeringPolicy size="1MB"/>-->
<DefaultRolloverStrategy max="10"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<console name="LogConsole" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="${patternLayout}"/>
</console>
说明:
Properties中配置动态的东西,方便修改
RollingFile 滚动打印,以及指定路径,样式,打印方式,打印级别
LogConsole控制台打印
<logger name="com.caigaoqing.tech.aspect.LogAuditAspect" level="all" additivity="false">
<appender-ref ref="importDataLog"></appender-ref>
<appender-ref ref="LogConsole"></appender-ref>
</logger>
那个类使用这个打印,就是规定哪个类去打印上面的使用指定LogAuditAspect打印的东西全部放到 logs/${logName}.log
中。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。