package silentium.gameserver.utils;
import static silentium.gameserver.utils.IllegalPlayerAction.PUNISH_BROADCAST;
import static silentium.gameserver.utils.IllegalPlayerAction.PUNISH_JAIL;
import static silentium.gameserver.utils.IllegalPlayerAction.PUNISH_KICK;
import static silentium.gameserver.utils.IllegalPlayerAction.PUNISH_KICKBAN;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import silentium.gameserver.model.L2ItemInstance;
import silentium.gameserver.model.L2Object;
import silentium.gameserver.model.actor.instance.L2PcInstance;
/**
* Класс, помогающий логгировать определенные события. Это можно было бы
* перенести в layouts, но тогда пришлось бы отправлять аргументы для логгирования
* через массив, а это будет слишком жирно, только если не сделать отдельный
* сервер для логгирования.
*
* @author Tatanka
*/
public class LoggingUtils
{
private static final String[] excludeItemType = { "Arrow", "Shot", "Herb" };
// строится тут, а не в layout, потому что пришлось бы отправлять аргументы
// массивом, а это слишком жирно будет,
// только если не сделать отдельный сервер для чата или логгирования.
public static void logChat(Logger chatLogger, String senderName, String receiverName, String message, String chatName)
{
final StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append('[');
stringBuilder.append(chatName);
stringBuilder.append("] ");
stringBuilder.append('\'');
stringBuilder.append(senderName);
stringBuilder.append('\'');
if (receiverName != null)
{
stringBuilder.append(" to ");
stringBuilder.append('\'');
stringBuilder.append(receiverName);
stringBuilder.append('\'');
}
stringBuilder.append(", message: \"");
stringBuilder.append(message);
stringBuilder.append('"');
stringBuilder.append('.');
chatLogger.info(stringBuilder.toString());
}
public static void logItem(Logger itemLogger, String processPrefix, String process, L2ItemInstance item, String ownerName, L2Object reference)
{
final StringBuilder stringBuilder = new StringBuilder();
// Don't log arrows, shots and herbs.
if (ArrayUtils.contains(excludeItemType, item.getItemType().toString()))
return;
stringBuilder.append(processPrefix);
stringBuilder.append(process);
stringBuilder.append(", owner '");
stringBuilder.append(ownerName);
stringBuilder.append('\'');
stringBuilder.append(", item object id '");
stringBuilder.append(item.getObjectId());
stringBuilder.append('\'');
stringBuilder.append(", item name '");
stringBuilder.append(item.getItem().getName());
stringBuilder.append('\'');
stringBuilder.append(", item count '");
stringBuilder.append(item.getCount());
stringBuilder.append('\'');
if (item.getEnchantLevel() > 0)
{
stringBuilder.append(", item enchant level '");
stringBuilder.append('+');
stringBuilder.append(item.getEnchantLevel());
stringBuilder.append('\'');
}
stringBuilder.append(", reference '");
stringBuilder.append(reference.toString());
stringBuilder.append('.');
itemLogger.info(stringBuilder.toString());
}
public static void logAudit(Logger auditLogger, String message, L2PcInstance actor, int punishment)
{
final StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(message);
stringBuilder.append(" by ");
stringBuilder.append(actor.getName());
stringBuilder.append(" and punishment was ");
switch (punishment)
{
case PUNISH_BROADCAST:
stringBuilder.append("broadcast");
break;
case PUNISH_KICK:
stringBuilder.append("kick");
break;
case PUNISH_KICKBAN:
stringBuilder.append("ban");
break;
case PUNISH_JAIL:
stringBuilder.append("jail");
break;
}
stringBuilder.append('.');
auditLogger.info(stringBuilder.toString());
}
}