改造-Log4j
Retrofit - Log4j
我在 java 应用程序中使用 Retrofit 来访问 api-rest。
我使用的是简单代码:
RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.HEADES_AND_ARGS).setConverter(new GsonConverter(gson)).setClient(httpClient).build();
是否可以将改装日志映射到 log4j?
RestAdapter.Builder
有方法 setLog(Log)
获取 RestAdapter.Log
接口作为参数。此界面如下所示:
/** Simple logging abstraction for debug messages. */
public interface Log {
/** Log a debug message to the appropriate console. */
void log(String message);
}
您可以将 LogLevel 设置为 f.e。 FULL 并创建 class 包装 log4j 并实现 Log
接口并在 log(String)
方法中记录您的日志,但您将获得所有日志作为字符串。无法查看是从哪个级别来的日志。
包装示例
public class ExampleLog4J implements RestAdapter.Log {
private static final Logger logger = logger.getLogger(ExampleLogger.class)
ExampleLog4J(){
}
@Override
public void log(String message) {
log.info("Retrofit# "+message);
}
}
并且在创建 RestAdapter 的地方使用:
new RestAdapter.Builder().setLog(new ExampleLog4J()).
您可以执行如下操作:
new RestAdapter.Builder()
.setLogLevel(LOGGER.isDebugEnabled() ? retrofit.LogLevel.FULL : retrofit.LogLevel.BASIC)
.setLog(LOGGER.isDebugEnabled() ? LOGGER::debug : LOGGER::info)
retrofit.LogLevel
用于指定您需要从 Retrofit 获得多少详细的日志记录。
retrofit.RestAdapter.Log
的实现被传递给 RestAdapter
的 setLog()
。 RestAdapter
在这种情况下将其所有内部日志记录委托给 log4j Logger。
这里 LOGGER
是你要像下面这样初始化的东西
private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SomeClass.class);
LOGGER::debug
in Java 8 等同于下面匿名的 class
new retrofit.RestAdapter.Log() {
@Override
public void log(String message) {
LOGGER.debug(message);
}
}
你也可以使用okhttp的日志,beta2版retrofit中引入的即将上线的2.6.0版本的快照目前运行良好,你可以在本指南中看到如何实现它https://futurestud.io/blog/retrofit-2-log-requests-and-responses/
非常易于使用和实施。
我在 java 应用程序中使用 Retrofit 来访问 api-rest。
我使用的是简单代码:
RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.HEADES_AND_ARGS).setConverter(new GsonConverter(gson)).setClient(httpClient).build();
是否可以将改装日志映射到 log4j?
RestAdapter.Builder
有方法 setLog(Log)
获取 RestAdapter.Log
接口作为参数。此界面如下所示:
/** Simple logging abstraction for debug messages. */
public interface Log {
/** Log a debug message to the appropriate console. */
void log(String message);
}
您可以将 LogLevel 设置为 f.e。 FULL 并创建 class 包装 log4j 并实现 Log
接口并在 log(String)
方法中记录您的日志,但您将获得所有日志作为字符串。无法查看是从哪个级别来的日志。
包装示例
public class ExampleLog4J implements RestAdapter.Log {
private static final Logger logger = logger.getLogger(ExampleLogger.class)
ExampleLog4J(){
}
@Override
public void log(String message) {
log.info("Retrofit# "+message);
}
}
并且在创建 RestAdapter 的地方使用:
new RestAdapter.Builder().setLog(new ExampleLog4J()).
您可以执行如下操作:
new RestAdapter.Builder()
.setLogLevel(LOGGER.isDebugEnabled() ? retrofit.LogLevel.FULL : retrofit.LogLevel.BASIC)
.setLog(LOGGER.isDebugEnabled() ? LOGGER::debug : LOGGER::info)
retrofit.LogLevel
用于指定您需要从 Retrofit 获得多少详细的日志记录。
retrofit.RestAdapter.Log
的实现被传递给 RestAdapter
的 setLog()
。 RestAdapter
在这种情况下将其所有内部日志记录委托给 log4j Logger。
这里 LOGGER
是你要像下面这样初始化的东西
private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SomeClass.class);
LOGGER::debug
in Java 8 等同于下面匿名的 class
new retrofit.RestAdapter.Log() {
@Override
public void log(String message) {
LOGGER.debug(message);
}
}
你也可以使用okhttp的日志,beta2版retrofit中引入的即将上线的2.6.0版本的快照目前运行良好,你可以在本指南中看到如何实现它https://futurestud.io/blog/retrofit-2-log-requests-and-responses/ 非常易于使用和实施。