其中一个选项是创建一个新的接口ContextProvider,然后从这里获取您的上下文字符串。
public interface ContextProvider{
public List<String> getContextToLog();
}
...
public class DefaultLoggingContext implements ContextProvider{
public List<String> getContextToLog(){
...
list.Add(CurrentUser.getName());
...
return list;
}
}
...
public class Logger{
private static ContextProvider contextProvider;
public static initiliseLogger(ContextProvider defaultProvider){
contextProvider = defaultProvider;
}
public static log(String text){
log(text, contextProvider);
}
public static log(String text, contextProvider){
List<String> toLog = contextProvider.getContextToLog();
toLog.add(text);
}
...
public class ...{
private ContextProvider loggingContext; // set by a constructor, factory method or a IOC container
private onApplicationStart(){
Logger.initiliseLogger(loggingContext)
}
}
你可以更进一步,使用格式化程序而不是上下文提供程序,格式化程序将负责获取输入字符串“text”并完成格式化,包括添加会话、日期、时间、请求等信息。您可以查看 log4* 来获得完整的实现。
在一份脚注中,我建议,将标识方法变成一种不是一种固定方法的典型方法,会是一种非常好的举动,你既可以支持一种,也可以支持静态的标志,或者你可以找到并替换标签。 我真正喜欢的标志4* 的一个特征是,能够根据类别或一揽子办法改变对伐木的敏感性。