想通过配置log-access来实现直接使用浏览器来访问我们自己指定的log文件。
方案:
原来以为是可以通过直接配置log-access的方式来是实现用http来访问我们的日志文件的。我的意思是说:如果我们把日志文件重定向到服务器上的:/server/logs/taobao.log文件,一般情况下,我们都是通过登录到服务器上,然后tail -f /server/logs/taobao.log来查看,但是这样子很麻烦,我想直接在浏览器里查看这个日志文件,就像查看ftp服务器上的某个文件一下方便。但是后来发现log-access不是这个用途,log-access主要是用来配置一个文件日志文件,来记录 外部访问的http请求信息的。
那不管怎么样,既然看了一下log-access就记录一下好了,用http方式访问日志,下次重写一个文章好了。
实施:
首先是给出几个链接,对理解logback有一些帮助。
http://blog.csdn.net/longaohun/article/details/6782046
http://wuyilun2.blog.163.com/blog/static/9853110201111595858365/
以及log-access官网
http://logback.qos.ch/access.html#tomcat
按照官网的解释在tomcat上的配置可以如下:
1. 修改$TOMCAT_HOME/conf/server.xml文件
<Valve className="ch.qos.logback.access.tomcat.LogbackValve" filename="c:/logback-access.xml"/>后面的finlename参数用来指定logback-access.xml文件的位置。
2. 添加 logback-access.xml文件,默认是放在$TOMCAT_HOME/conf/目录下就好。
<configuration> <!-- always a good activate OnConsoleStatusListener --> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${catalina.base}/logs/access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${catalina.base}/logs/access.%d{yyyy-MM-dd}.log.zip</fileNamePattern> </rollingPolicy> <encoder> <pattern>combined</pattern> </encoder> </appender> <!-- always a good activate OnConsoleStatusListener --> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%h %l %u %user %date "%r" %s %b</pattern> </encoder> </appender> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </configuration>
这里相关的Appender的信息可以参考前文的link文章。
3. 另外如果想要通过web来查看logback-access.xml配置的相关信息,logback-access提供了一个serverlet来获取这些配置信息。只要在我们的web项目里的web.xml里添加如下mapping信息。
<servlet> <servlet-name>AccessViewStatusMessages</servlet-name> <servlet-class>ch.qos.logback.access.ViewStatusMessagesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AccessViewStatusMessages</servlet-name> <url-pattern>/lbAccessStatus</url-pattern> </servlet-mapping>
4. 最后要做的就是添加logback-access.jar的依赖了,我们需要两个jar包,一个logback-access-1.x.jar,另一个是logback-core-1.x.jar,因为logback-access跟slf4j是类似的,它只是提供了一层皮,内核还是调用的logback-core。
pom.xml
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.3</version> </dependency>
添加这个就好了,logback-access依赖了logback-core。
好了这样就可以启动web应用了。
启动完成之后,就可以访问http://localhost:8080/userlogin/lbAccessStatus
结果如下:
access.log 日志来一个截图:
127.0.0.1 - - [18/Oct/2015:15:40:11 +0800] "GET /userlogin/lbAccessStatus HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0" 127.0.0.1 - - [18/Oct/2015:15:47:22 +0800] "GET /userlogin/lbAccessStatus HTTP/1.1" 500 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0" 127.0.0.1 - - [18/Oct/2015:16:05:10 +0800] "GET /userlogin/lbAccessStatus HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0" 127.0.0.1 - - [18/Oct/2015:16:05:21 +0800] "GET /userlogin/lbAccessStatus HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0" 127.0.0.1 - - [18/Oct/2015:16:05:40 +0800] "GET /userlogin/lbAccessStatus HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0" 127.0.0.1 - - [18/Oct/2015:16:06:08 +0800] "GET /userlogin/lbAccessStatus HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"
通过上面的日志,我们大概知道请求来源,以及请求了哪个requestion,对方的pc以brower的相关信息,这个对网站流量分析还是很有用的
遇到的坑:
1. HTTP Status 500 - ch.qos.logback.core.BasicStatusManager cannot be cast to ch.qos.logback.core.status.StatusManager。
>>原因是jar包冲突了。因为logback-access-1.1.3.jar和logback-core-1.1.3.jar既在tomcat/lib目录下,也在web项目的WEB-INF\lib目录下,这样就造成了冲突。保留一个地方的就可以解决这个问题了。通常我们是保留tomcat/lib下的,不然tomcat启动的时候,会去找配置文件server.xml文件里的ch.qos.logback.access.tomcat.LogbackValve 类,如果找不到就报错了。
----EOF----