[b]背景:[/b]
想通过配置log-access来实现直接使用浏览器来访问我们自己指定的log文件。

[b]方案:[/b]
原来以为是可以通过直接配置log-access的方式来是实现用http来访问我们的日志文件的。我的意思是说:如果我们把日志文件重定向到服务器上的:/server/logs/taobao.log文件,一般情况下,我们都是通过登录到服务器上,然后tail -f /server/logs/taobao.log来查看,但是这样子很麻烦,我想直接在浏览器里查看这个日志文件,就像查看ftp服务器上的某个文件一下方便。但是后来发现log-access不是这个用途,log-access主要是用来配置一个文件日志文件,来记录 外部访问的http请求信息的。

那不管怎么样,既然看了一下log-access就记录一下好了,用http方式访问日志,下次重写一个文章好了。

[b]实施:[/b]
首先是给出几个链接,对理解logback有一些帮助。

[url][/url] 

[url]http://wuyilun2.blog.163.com/blog/static/9853110201111595858365/[/url] 

以及log-access官网 

[url]http://logback.qos.ch/access.html#tomcat[/url]


按照官网的解释在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


结果如下:



[img]http://dl2.iteye.com/upload/attachment/0112/4032/17bc5805-a810-30cb-b30a-e53db4b7a9e3.png[/img]


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