在网上看了好多的,还没有完全了解门面日志,简单的配置了一下,到是能用,以后再慢慢积累。闲话少说,直接上代码:
1.导包
<!--
引入slf4j的核心包
url:::https://mvnrepository.com/artifact/org.slf4j/slf4j-api
-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!--
引入slf4j对应log4j2的中间件
url:::https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl
-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<scope>runtime</scope>
<version>2.11.0</version>
</dependency>
<!--
引入log4j2核心包
URL::https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core
-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>runtime</scope>
<version>2.11.0</version>
</dependency>
2.配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
<configuration status="OFF">
<!-- 日志文件位置及名称 -->
<Properties>
<!-- 日志名称 -->
<Property name="infoLog">info.log</Property>
<Property name="errorLog">error.log</Property>
<!-- 日志位置 -->
<!-- 日志位置在tomcat根目录下 -->
<!-- <Property name="tomcatClasspath" >${sys:catalina.home}/logInfo</Property> -->
<!-- 日志位置在自定义磁盘位置 -->
<Property name="tomcatClasspath" >C:/Users/Administrator/Desktop/logInfo</Property>
<!-- 日志位置在eclipse根目录下 -->
<!-- <Property name="tomcatClasspath" >logInfo</Property> -->
</Properties>
<!-- 输出终端配置 -->
<appenders>
<!-- 1.输出控制台的配置 target有两种输出方式:SYSTEM_OUT(默认)、SYSTEM_ERR -->
<Console name="Console" target="SYSTEM_ERR">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 日志输出的格式: 时间 日志级别 类路径 行 方法 - 日志信息 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!-- 2.将日志保存到指定文件 -->
<!-- append属性,每次运行tomcat时是否覆盖指定的日志文件(TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true) -->
<File name="errorFile" fileName="${tomcatClasspath}/${infoLog}" append="true">
<!-- 添加过滤器,可以有选择的输出类别; 将level及其以上级别的日志(onMatch)保存到指定文件,其他级别的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 保存日志的格式: 年-月-日 at 时分秒 时区 日志级别 类的完全限定名 所在行 所在方法 - 具体日志信息-->
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 这个会打印出所有信息,每次大小超过 size,则这size大小的日志会自动存入按年份-月份 建立的文件夹下面并进行压缩,作为存档 -->
<!-- filePattern:压缩后的文件路径 -->
<RollingFile name="RollingFile" fileName="${tomcatClasspath}/${errorLog}" filePattern="${tomcatClasspath}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz" immediateFlush="true">
<!-- 日志输出格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<!-- 日志文件大小(256KB 或 1MB) -->
<SizeBasedTriggeringPolicy size="128KB"/>
<!-- 最多保留文件数 -->
<DefaultRolloverStrategy max="2"/>
</RollingFile>
</appenders>
<!-- logger配置,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!--建立一个logger,此logger监听name对应的包名下的日志输出,level表示日志级别-->
<!-- <Logger name="com.goatherd.erp.ssm.controller" level="trace" additivity="true">
<AppenderRef ref="Console" />
</Logger> -->
<!--建立一个logger,此logger监听name对应的包名下的日志输出,level表示日志级别-->
<!-- <Logger name="com.goatherd.erp.ssm.controller" level="info" additivity="true">
<AppenderRef ref="errorFile" />
</Logger> -->
<!-- 将业务dao接口填写进去,并用控制台输出即可,这样只要调用到该包下的dao就会在控制台输出,适合测试用 -->
<logger name="com.goatherd.erp.ssm.dao" level="TRACE" additivity="false">
<appender-ref ref="Console" />
</logger>
<!-- 建立一个默认的root的logger。 -->
<!-- 如果没有这个Root也会保存,所以不是很明白这个的作用。 -->
<!-- 如果Root中引用的和Logger中引用的重复,则日志记录也会重复。 -->
<!-- 属性level是日志的级别,level将和引用里的级别组合使用(level高于引用中的级别则按照此level,level低于引用中的级别则按引用中的级别)-->
<Root level="trace">
<!-- <AppenderRef ref="Console" /> -->
<AppenderRef ref="errorFile" />
<AppenderRef ref="RollingFile" />
</Root>
</loggers>
</configuration>
3.Controller测试
Logger logger = LoggerFactory.getLogger(LoginController.class);
@Resource
private TestDao testDao;
@RequestMapping("/login.do")
@ResponseBody
public JsonResult login(String username,String password,String randomcode,HttpServletRequest request) {
String[] err = null;
try {
String a = err[0];
} catch (Exception e1) {
logger.error(e1.getMessage(),e1);
logger.info(e1.getMessage(),e1);
}
System.out.println("登录 。。。。。。");
logger.trace("trace---1");
logger.debug("debug---2");
logger.info("info-----3");
logger.warn("warn-----4");
logger.error("error---5");
testDao.selectUserInfo();
Subject subject = SecurityUtils.getSubject();
AuthenticationToken token = new UsernamePasswordToken(username, password);
String msg = null;
int state = 0;
try {
subject.login(token);//执行认证操作. 调用realm
}catch(UnknownAccountException u){
msg = "账号错误";state = 1;
}catch(IncorrectCredentialsException i){
msg = "密码错误";state = 1;
}catch (AuthenticationException e) {
msg = "认证失败";state = 1;
}
return new JsonResult(state,null,msg);
}
4.junit测试类
public class TestDAO {
private TestDao testDao;
private ApplicationContext config;
@Before
public void init(){
String[] conf = {"config/spring-mvc.xml", "config/spring-mybatis.xml"};
config = new ClassPathXmlApplicationContext(conf);
}
@Test
public void test01() {
testDao = config.getBean("testDao",TestDao.class);
System.out.println(testDao.selectUserInfo()); //这里测试的话就会将SQL打印出来了
}
}