All pastes #26284 Raw Edit

Unnamed

public java v1 · immutable
#26284 ·published 2005-10-22 16:13 UTC
rendered paste body
package net.sf.l2j.logserver;import java.io.File;import java.io.FileWriter;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import net.sf.l2j.gameserver.ClientScheduler;import net.sf.l2j.gameserver.model.L2PcInstance;public class LogServer extends Thread{    private static ArrayList<LogEntry> _data;    static LogServer _instance;    private final int POOL_SIZE = 6000;    private final long FLUSH_INTERVAL = 2;    public LogServer()    {        _data = new ArrayList<LogEntry>(POOL_SIZE);        ClientScheduler.getInstance().scheduleLowAtFixedRate(new flush(),FLUSH_INTERVAL*60*1000L,FLUSH_INTERVAL*60*1000L);        start();    }        public static LogServer getInstance()    {        if(_instance == null)            _instance = new LogServer();        return _instance;    }        public void run()    {        System.out.println("LogServer thread up&running," +                           "allocated "+POOL_SIZE+" pool entries, flush interval(minutes): "+FLUSH_INTERVAL);        while(true)        {        }    }        public synchronized void add(int logid, L2PcInstance actor, String data)    {        synchronized(_data)        {            LogEntry entry = new LogEntry(logid,actor,data);            _data.add(entry);        }    }        private class flush implements Runnable    {        public void run()        {            ArrayList<LogEntry> tmp = null;                        System.out.println(">> flushing logs, total records: "+_data.size());            // lock _data array, copy & unlock            synchronized(_data)            {                tmp = new ArrayList<LogEntry>(_data);                _data.clear();            }                        System.out.println(">> flushing logs, tmp array records: "+tmp.size());                        // now long-running flush task, _data now free, so we should avoid thread locking            String date = (new SimpleDateFormat("yy_MM_dd_H")).format(new Date());            new File("log/logd").mkdirs();            File file = new File("log/logd/"+date+"_logd"+".txt");            FileWriter save = null;             for(LogEntry entry : tmp)            {                try                {                    save = new FileWriter(file, true);                    String out = "["+entry.getTimestamp()+"]:"                                    +entry.getLogId()+","                                    +entry.getActor()+","                                    +entry.getTarget()+","                                    +entry.getData()                                    +"\n";                    save.write(out);                }                catch (Exception e)                {                    System.out.println("Error flushing log data: "+e);                    e.printStackTrace();                }                finally                {                    try { save.close(); } catch (Exception e1) { }                }            }        }    }        private class LogEntry    {        private int _logid;        private String _actor;        private int _target;        private String _data;        private long timestamp;        public LogEntry(int logid, L2PcInstance actor, String data)        {            _logid = logid;            _actor = actor.getName();            _data = data;                        if(actor.getTarget() != null)                _target = actor.getTarget().getObjectId();                        timestamp = System.currentTimeMillis();        }                public int getLogId()        {            return _logid;        }                public int getTarget()        {            return _target;        }                public String getActor()        {            return _actor;        }                public String getData()        {            return _data;        }                public long getTimestamp()        {            return timestamp;        }    }}example://BuyLust.java, after line 241:LogServer.getInstance().add(901,activeChar,item.getItemId()+","+item.getCount()+","+(subTotal + tax));and u got in logs:[1129997620195]:901,SAYMON,268437320,2509,39,663[timestamp]:logid,actor,targetid,item,amount,price