sea*_*ges 12 java tomcat log4j slf4j
我正在寻找一种在webapp中检索Tomcat日志的方法.在过去,我已经看到其他webapps中提供的这个功能,通常将日志转储到Servlet中.
我正在使用slf4j(使用log4j)和Tomcat 6.我没有在Tomcat文档中找到任何相关内容,尽管JMX API看起来可能提供了一些有用的东西?我不太关心输出是仅代表webapp日志记录还是整个Tomcat日志,要么就足够了.
理想情况下,我希望找到一个不涉及从文件系统中抓取日志的解决方案,尽管如果这是唯一的方法,如果可以在运行时计算日志目录,那将会很棒...
sou*_*ica 20
从文件系统中抓取日志可能是最简单的方法.您可以使用以编程方式直接获取日志System.getProperty("catalina.base") + "/logs".
否则,你可以在log4j配置中设置一个额外的appender来记录JDBC,JMS,Writer等等.对你的应用程序有什么意义.
此函数将获取与给定前缀匹配的最新日志文件.您不需要知道日志写入的目录.
public static File locateLogFile( final String prefixToMatch ) {
File result = null;
Handler[] handlers = LogManager.getLogManager().getLogger( "" ).getHandlers();
try {
for( Handler handler : handlers ) {
Field directoryField;
Field prefixField;
try {
//These are private fields in the juli FileHandler class
directoryField = handler.getClass().getDeclaredField( "directory" );
prefixField = handler.getClass().getDeclaredField( "prefix" );
directoryField.setAccessible( true );
prefixField.setAccessible( true );
} catch( NoSuchFieldException e ) {
continue;
}
String directory = (String)directoryField.get( handler );
if( prefixToMatch.equals( prefixField.get( handler ) ) ) {
File logDirectory = new File( directory );
File[] logFiles = logDirectory.listFiles( new FileFilter() {
public boolean accept( File pathname ) {
return pathname.getName().startsWith( prefixToMatch );
}
} );
if( logFiles.length == 0 ) continue;
Arrays.sort( logFiles );
result = logFiles[ logFiles.length - 1 ];
break;
}
}
} catch( IllegalAccessException e ) {
log.log( Level.WARNING, "Couldn't get log file", e );
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7699 次 |
| 最近记录: |