1、针对每个类里都定义一个logger显得繁琐,可以定义一个LogUtil,将作用相似的某些类划分成一个log,例如notify package中有notifyTask、notifyProcessor、notifyService,可以归为
static public final Logger notifyLog = LoggerFactory.getLogger("com.taobao.diamond.server.notifyLog");
LogUtil结构如下,每个log可以设置成一个log文件,利用logback.xml配置
public class LogUtil {
/**
* 默认的日志
*/
static public final Logger defaultLog = LoggerFactory.getLogger("com.taobao.diamond.server");
/**
* 致命错误,需要告警
*/
static public final Logger fatalLog = LoggerFactory
.getLogger("com.taobao.diamond.server.fatal");
......
}
<logger name="com.taobao.diamond.server.fatal" additivity="false">
<level value="INFO" />
<appender-ref ref="fatalFile" />
</logger>
<appender name="fatalFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.home}/diamond/logs/fatal.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${user.home}/diamond/logs/fatal.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
<maxFileSize>20MB</maxFileSize>
<MaxHistory>15</MaxHistory>
<totalSizeCap>128MB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<Pattern>%date %level %msg%n%n</Pattern>
<charset>GBK</charset>
</encoder>
</appender>
2、Properties文件包含众多kv,定义一个PropertyUtil,由它负责解析出每个kv,再使用函数返回v。同样系统参数如System.getProperty("diamond.server.port", "8080");也可以使用这种方式。
notifySocketTimeout = Integer.valueOf(props.getProperty("notifySocketTimeout", "200"));
public static int getNotifySocketTimeout() {return notifySocketTimeout;}