Hello, im trying to create a log to log a message but it doesn't work anyone know a better way/fix? Code: public void onEnable(){ PluginDescriptionFile pdfFile = getDescription(); logger.info("["+pdfFile.getName()+"] version "+pdfFile.getVersion()+" has been enabled!"); Bukkit.getPluginManager().registerEvents(this, this); for(Handler h : notifylog.getHandlers()) { notifylog.removeHandler(h); } try { notifylog.addHandler(new FileHandler(this.getDataFolder()+"/orenotify.log")); } catch(IOException e) { logger.info("Failed to create the log"); e.printStackTrace(); } } @EventHandler public void breakblock(BlockBreakEvent event) { Player player = event.getPlayer(); Material block = event.getBlock().getType(); if (block == Material.DIAMOND_ORE || block == Material.IRON_ORE || block == Material.GOLD_ORE || block == Material.EMERALD_ORE || block == Material.REDSTONE_ORE) { for (Player p : Bukkit.getServer().getOnlinePlayers()) { if (p.hasPermission("notify.orenotify")) { p.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.DARK_AQUA + " has mined " + ChatColor.LIGHT_PURPLE + Material.getMaterial(block.getId())); } } notifylog.info(player.getName()+ " has mined "+Material.getMaterial(block.getId()));// <-- i want to log this } } }
Did you want the log to be saved in a config or printed on screen to ops only or just to the cmd line?
I like to use YML files, personally I find them pretty easy. Or sql tables What type of file does it log to?
YAML makes a bad log, because the entire log from the beginning of the file needs to be kept in memory.
MercilessPvP I have tested the code, and it just works for me. Are you still getting the IOException: cannot get lock?
Lolmewn I say stop making suggestions that make no sense for low usage loggers :3 (no seriously, it would make no sense to use a database here)
No it doesnt Lolmewn i dont know what is wrong EDIT by Moderator: merged posts, please use the edit button instead of double posting.
MercilessPvP aaah finally the error. I think I might have found your fix (replace your part of the code with this): Code:java for(Handler h : blockbreak.getHandlers()) { blockbreak.removeHandler(h); } try { File f = this.getDataFolder(); if(!f.exists()) { if(!f.mkdir()) { throw new IOException("Could not create folder '/plugins/"+"TestPlugin"+"'"); } else { log.info("created datafolder"); } } else { log.info("folder exists: "+f.getAbsolutePath()); } FileHandler fh = new FileHandler(this.getDataFolder()+File.separator+"orenotify.log"); blockbreak.addHandler(fh); blockbreak.setUseParentHandlers(false); } catch(IOException e) { blockbreak.info("Failed to create the log"); e.printStackTrace(); } The problem was that your datafolder did not exists, and this code also checks if it does. If it does not, it attempts to create the directory :3. Tested and confirmed
fireblast709 am i supose to replace Code: for(Handler h : notifylog.getHandlers()) { notifylog.removeHandler(h); } try { notifylog.addHandler(new FileHandler(this.getDataFolder()+"/orenotify.log")); } catch(IOException e) { logger.info("Failed to create the log"); e.printStackTrace(); } } ? cause if i do that i get many errors
lol you have replaced a } too much I think. A small 'gift' from me, your correct onEnable(): Code:java public void onEnable(){ PluginDescriptionFile pdfFile = getDescription(); logger.info("["+pdfFile.getName()+"] version "+pdfFile.getVersion()+" has been enabled!"); Bukkit.getPluginManager().registerEvents(this, this); for(Handler h : blockbreak.getHandlers()) { blockbreak.removeHandler(h); } try { File f = this.getDataFolder(); if(!f.exists()) { if(!f.mkdir()) { throw new IOException("Could not create folder '/plugins/"+"TestPlugin"+"'"); } else { log.info("created datafolder"); } } else { log.info("folder exists: "+f.getAbsolutePath()); } FileHandler fh = new FileHandler(this.getDataFolder()+File.separator+"orenotify.log"); blockbreak.addHandler(fh); blockbreak.setUseParentHandlers(false); } catch(IOException e) { blockbreak.info("Failed to create the log"); e.printStackTrace(); }}
fireblast709 i get errors i can upload an image fireblast709 EDIT by Moderator: merged posts, please use the edit button instead of double posting.
fireblast709 thanks fireblast709 what about File? fireblast709 import? import java.io.File; EDIT by Moderator: merged posts, please use the edit button instead of double posting.
fireblast709 hello, i am getting this: Code: <?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2012-11-07T20:27:32</date> <millis>1352316452168</millis> <sequence>47</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined IRON_ORE</message> </record> <record> <date>2012-11-07T20:27:33</date> <millis>1352316453192</millis> <sequence>48</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> <record> <date>2012-11-07T20:27:34</date> <millis>1352316454361</millis> <sequence>49</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> <record> <date>2012-11-07T20:27:36</date> <millis>1352316456009</millis> <sequence>50</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> <record> <date>2012-11-07T20:27:37</date> <millis>1352316457155</millis> <sequence>51</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> <record> <date>2012-11-07T20:27:38</date> <millis>1352316458010</millis> <sequence>52</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> <record> <date>2012-11-07T20:27:39</date> <millis>1352316459054</millis> <sequence>53</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> <record> <date>2012-11-07T20:27:40</date> <millis>1352316460005</millis> <sequence>54</sequence> <logger>orenotify</logger> <level>INFO</level> <class>me.mercilesspvp.orenotify.orenotify</class> <method>breakblock</method> <thread>13</thread> <message>Player has mined DIAMOND_ORE</message> </record> </log>
MercilessPvP I figured that would happen. Wrote you a formatter: Code:java class NotifyFormat extends Formatter{ @Override public String format(LogRecord record) { Date d = new Date(record.getMillis()); String time = d.toString(); return "["+time+"]: "+record.getMessage(); } } Add the class to the main instance (after the main class to be exact) and add this: Code:java // You have the next lineFileHandler fh = new FileHandler(this.getDataFolder()+File.separator+"orenotify.log");// Now after that line, add:fh.setFormatter(new NotifyFormat())