我必须将自定义方法方法添加到我的日志系统中。假设我有几行代码,例如:私有静态Logger LOGGER=LoggerFactory.getLogger(MyJavaClass.class);
日志记录由slf4j处理。如何通过添加新(!)扩展我的记录器方法,如public void error(SomeTypeObject obj){/implementation/}
目标是不更改现有代码。如何强制LoggerFactory返回使用上述方法扩展的自己的记录器实现?
我跟踪了这个问题的答案:stackoverflow.com/questions/2653855/implement-custom-logger-with-slf4j
所以,我做了我的LoggerFactory,StaticLoggerBinder和MyLoggerAdapter。
静态日志
public class StaticLoggerBinder implements LoggerFactoryBinder {
private static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder();
public static final StaticLoggerBinder getSingleton() {
return SINGLETON;
}
public static String REQUESTED_API_VERSION = "1.6.99";
private static final String loggerFactoryClassStr = MyLoggerFactory.class.getName();
private final ILoggerFactory loggerFactory;
private StaticLoggerBinder() {
loggerFactory = new MyLoggerFactory();
}
public ILoggerFactory getLoggerFactory() {
return loggerFactory;
}
public String getLoggerFactoryClassStr() {
return loggerFactoryClassStr;
}
}
记录器html" target="_blank">工厂
public class MyLoggerFactory implements ILoggerFactory {
ConcurrentMap<String, Logger> loggerMap;
public MyLoggerFactory() {
loggerMap = new ConcurrentHashMap<String, Logger>();
}
public Logger getLogger(String name) {
Logger simpleLogger = loggerMap.get(name);
if (simpleLogger != null) {
return simpleLogger;
} else {
Logger newInstance = new MyLoggerAdapter(name);
Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
return oldInstance == null ? newInstance : oldInstance;
}
}
void reset() {
loggerMap.clear();
}
}
迈洛格
public class MyLoggerAdapter implements Logger {
//methods from Logger interface
//and my additional method
public void error(Exception ex) {
//do smthng;
}
}
现在,在MyJavaClass中,我有一个字段private static Logger Logger=LoggerFactory。getLogger(MyJavaClass.class)
问题是,当我尝试
LOGGER. error(myExceptionObject)
时,该方法不可见。我错过了一些东西。我将非常感谢帮助。
在此示例中,记录器可以获得:
private static MyLoggerAdapter log = (MyLoggerAdapter) StaticLoggerBinder.getSingleton().getLoggerFactory.getLogger(MyController.class.getName());
在MyJavaClass中,应该使用MyLoggerFactory:
private static MyLoggerAdapter LOGGER = MyLoggerFactory.getLogger();
而不是
private static Logger LOGGER = LoggerFactory.getLogger(MyJavaClass.class);
虽然Blockly定义了许多标准块,但大多数应用程序需要定义和实现至少一些域相关块。 块由三个部分组成: 块定义对象:定义块的外观和行为,包括文本,颜色,字段和连接。 工具箱参考:工具箱XML中对块类型的引用,因此用户可以将其添加到工作区。 生成器函数:生成此块的代码字符串。它是用JavaScript编写的,即使目标语言不是JavaScript,甚至是用于Android端的Blockly。 块定义
考虑logdj、slf4j等日志库。它们有类似于<代码>日志的方法。信息(“”)。假设我想在这个库的顶部添加我自己的自定义方法,这样我就可以像这样使用它 log.audit ('') 向现有库中添加此类自定义方法的最佳方法是什么?
问题内容: 我正在研究Spring Data JPA。考虑下面的示例,默认情况下我将使所有crud和finder功能正常工作,如果我想自定义finder,那么也可以在界面本身中轻松完成。 我想知道如何为上述AccountRepository的实现添加完整的自定义方法?由于它是一个接口,所以我不能在那里实现该方法。 问题答案: 你需要为自定义方法创建一个单独的接口: 并提供该接口的实现类:
如果想要给为所有的repository接口增加一个方法,那么之前的方法是不可行的。为了给所有的repository添加自定义的方法,开发者首先需要定义一个中间过渡的接口。 Example 20. An interface declaring custom shared behavior(定义中间接口声明) @NoRepositoryBean public interface MyRepositor
为了通过自定义方法来丰富repository,首先要定义一个接口和一个接口的实现类。 Example 15. Interface for custom repository functionality(自定义接口) interface UserRepositoryCustom { public void someCustomMethod(User user); } Example 16. I
问题内容: 在Ruby中,您可以使用自定义方法覆盖任何内置对象类,如下所示: 我如何在python中做到这一点?有正常的方法还是黑客? 问题答案: 您不能这样做,因为内建类型是用C编码的。您可以对类型进行子类化: 测试: 您还可以使用来覆盖str-type ,但这并不意味着您可以使用文字,因为它链接到内建的。