All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alibaba.dubbo.container.page.pages.LogPageHandler Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 1999-2011 Alibaba Group.
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.alibaba.dubbo.container.page.pages;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;

import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;

import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.container.page.Menu;
import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler;

/**
 * LogPageHandler
 * 
 * @author william.liangf
 */
@Menu(name = "Log", desc = "Show system log.", order = Integer.MAX_VALUE - 11000)
public class LogPageHandler implements PageHandler {

    private static final int SHOW_LOG_LENGTH = 30000;

    private File            file;
    
    @SuppressWarnings("unchecked")
	public LogPageHandler() {
	    try {
			org.apache.log4j.Logger logger = LogManager.getRootLogger();
	        if (logger != null) {
	            Enumeration appenders = logger.getAllAppenders();
	            if (appenders != null) {
	                while (appenders.hasMoreElements()) {
	                    Appender appender = appenders.nextElement();
	                    if (appender instanceof FileAppender) {
	                        FileAppender fileAppender = (FileAppender)appender;
	                        String filename = fileAppender.getFile();
	                        file = new File(filename);
	                        break;
	                    }
	                }
	            }
	        }
	    } catch (Throwable t) {
	    }
    }

    public Page handle(URL url) {
        long size = 0;
		String content = "";
		String modified = "Not exist";
		if (file != null && file.exists()) {
			try {
				FileInputStream fis = new FileInputStream(file);
				FileChannel channel = fis.getChannel();
				size = channel.size();
				ByteBuffer bb;
				if (size <= SHOW_LOG_LENGTH) {
					bb = ByteBuffer.allocate((int) size);
					channel.read(bb, 0);
				} else {
					int pos = (int) (size - SHOW_LOG_LENGTH);
					bb = ByteBuffer.allocate(SHOW_LOG_LENGTH);
					channel.read(bb, pos);
				}
				bb.flip();
				content = new String(bb.array()).replace("<", "<")
						.replace(">", ">").replace("\n", "

"); modified = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date(file.lastModified())); } catch (IOException e) { } } Level level = LogManager.getRootLogger().getLevel(); List> rows = new ArrayList>(); List row = new ArrayList(); row.add(content); rows.add(row); return new Page("Log", "Log", new String[] {(file == null ? "" : file.getName()) + ", " + size + " bytes, " + modified + ", " + level}, rows); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy