如何为每个登录添加唯一标签 logging.properties
How to add a unique tag to each log in logging.properties
我的标准配置Tomcat 8.5将日志拆分成
- 卡特琳娜,
- 经理,
- 本地主机,
- 主机管理员
我的任务是为每个文件添加唯一标签:
CatalinaTag、mngTag、localTag、hostMngTag
我试图在互联网上找到解决方案,但没有成功。
我的 logging.properties 是这样的:
handlers = 1catalina.mypackage.CatalinaConsoleHandler, 2localhost.mypackage.LocalhostConsoleHandler, 3manager.mypackage.ManagerConsoleHandler, 4host-manager.mypackage.LocalhostConsoleHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.mypackage.CatalinaConsoleHandler, java.util.logging.ConsoleHandler
1catalina.mypackage.CatalinaConsoleHandler.directory = /.../logs
1catalina.mypackage.CatalinaConsoleHandler.prefix = catalina.
1catalina.mypackage.CatalinaConsoleHandler.formatter = mypackage.CatalinaFormatter
mypackage.CatalinaFormatter.format = [CatalinaTag %1$tF %1$tT] [%4$-7s] %5$s %n
2localhost.mypackage.LocalhostConsoleHandler.directory = /.../logs
2localhost.mypackage.LocalhostConsoleHandler.prefix = localhost.
2localhost.mypackage.LocalhostConsoleHandler.formatter =mypackage.LocalhostFormatter
mypackage.LocalhostFormatter.format = [localhostTag %1$tF %1$tT] [%4$-7s] %5$s %n
3manager.mypackage.ManagerConsoleHandler.directory = /.../logs
3manager.mypackage.ManagerConsoleHandler.prefix = manager.
3manager.mypackage.ManagerConsoleHandler.formatter =mypackage.ManagerFormatter
mypackage.ManagerFormatter.format = [manager %1$tF %1$tT] [%4$-7s] %5$s %n
4host-manager.mypackage.LocalhostConsoleHandler.directory = /.../logs
4host-manager.mypackage.LocalhostConsoleHandler.prefix = host-manager.
4host-manager.mypackage.LocalhostConsoleHandler.formatter =mypackage.HostManagerFormatter
mypackage.HostManagerFormatter.format = [manager %1$tF %1$tT] [%4$-7s] %5$s %n
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.mypackage.LocalhostConsoleHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.mypackage.ManagerConsoleHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.mypackage.LocalhostConsoleHandler
这里有一个 *ConsoleHandler 的例子
package mypackage;
import java.util.logging.ConsoleHandler;
public class CatalinaConsoleHandler extends ConsoleHandler {
}
这里是 *Formatter 的例子
package mypackage;
import java.util.logging.SimpleFormatter;
public class CatalinaFormatter extends SimpleFormatter {
}
但到目前为止我还做不到。你知道为什么吗?
感谢您的帮助!
如果您使用的是原始 java.util.logging
,您多次使用 subclassing ConsoleHandler
(或者更确切地说 FileHandler
)和 SimpleFormatter
的方法会是正确的:JUL 只允许每个 Handler
和 Formatter
class 有一个实例。这种方法 将 工作,但您需要将 mypackage.CatalinaConsoleHandler
和公司添加到 system classloader(参见 Tomcat class装载机)。
然而,有一个更简单的方法:Tomcat 有自己的 JUL 扩展(参见 documentation),它允许您:
- 为每个处理程序名称添加前缀并创建多个相同的处理程序class。前缀必须以数字开头(例如
1catalina.
)。带前缀的属性仅适用于特定的处理程序,而 non-prefixed 属性适用于所有处理程序。
- 使用 属性 占位符
${...}
将替换为适当的 Java 系统 属性。还有三个特殊属性(classloader.serverName
、classloader.hostName
和 classloader.webappName
)分别解析引擎、主机和上下文的名称。
因此您可以使用:
# List of all handler names:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler
# Handlers attached to the root logger:
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
# These properties apply to all handlers
org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
# These properties apply only to `1catalina.org.apache.juli.AsyncFileHandler`
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.java.util.logging.SimpleFormatter.format = [CatalinaTag %1$tF %1$tT] [%4$-7s] %5$s %n
# These properties apply only to `2localhost.org.apache.juli.AsyncFileHandler`
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.java.util.logging.SimpleFormatter.format = [LocalhostTag %1$tF %1$tT] [%4$-7s] %5$s %n
我的标准配置Tomcat 8.5将日志拆分成
- 卡特琳娜,
- 经理,
- 本地主机,
- 主机管理员
我的任务是为每个文件添加唯一标签: CatalinaTag、mngTag、localTag、hostMngTag
我试图在互联网上找到解决方案,但没有成功。
我的 logging.properties 是这样的:
handlers = 1catalina.mypackage.CatalinaConsoleHandler, 2localhost.mypackage.LocalhostConsoleHandler, 3manager.mypackage.ManagerConsoleHandler, 4host-manager.mypackage.LocalhostConsoleHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.mypackage.CatalinaConsoleHandler, java.util.logging.ConsoleHandler
1catalina.mypackage.CatalinaConsoleHandler.directory = /.../logs
1catalina.mypackage.CatalinaConsoleHandler.prefix = catalina.
1catalina.mypackage.CatalinaConsoleHandler.formatter = mypackage.CatalinaFormatter
mypackage.CatalinaFormatter.format = [CatalinaTag %1$tF %1$tT] [%4$-7s] %5$s %n
2localhost.mypackage.LocalhostConsoleHandler.directory = /.../logs
2localhost.mypackage.LocalhostConsoleHandler.prefix = localhost.
2localhost.mypackage.LocalhostConsoleHandler.formatter =mypackage.LocalhostFormatter
mypackage.LocalhostFormatter.format = [localhostTag %1$tF %1$tT] [%4$-7s] %5$s %n
3manager.mypackage.ManagerConsoleHandler.directory = /.../logs
3manager.mypackage.ManagerConsoleHandler.prefix = manager.
3manager.mypackage.ManagerConsoleHandler.formatter =mypackage.ManagerFormatter
mypackage.ManagerFormatter.format = [manager %1$tF %1$tT] [%4$-7s] %5$s %n
4host-manager.mypackage.LocalhostConsoleHandler.directory = /.../logs
4host-manager.mypackage.LocalhostConsoleHandler.prefix = host-manager.
4host-manager.mypackage.LocalhostConsoleHandler.formatter =mypackage.HostManagerFormatter
mypackage.HostManagerFormatter.format = [manager %1$tF %1$tT] [%4$-7s] %5$s %n
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.mypackage.LocalhostConsoleHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.mypackage.ManagerConsoleHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.mypackage.LocalhostConsoleHandler
这里有一个 *ConsoleHandler 的例子
package mypackage;
import java.util.logging.ConsoleHandler;
public class CatalinaConsoleHandler extends ConsoleHandler {
}
这里是 *Formatter 的例子
package mypackage;
import java.util.logging.SimpleFormatter;
public class CatalinaFormatter extends SimpleFormatter {
}
但到目前为止我还做不到。你知道为什么吗?
感谢您的帮助!
如果您使用的是原始 java.util.logging
,您多次使用 subclassing ConsoleHandler
(或者更确切地说 FileHandler
)和 SimpleFormatter
的方法会是正确的:JUL 只允许每个 Handler
和 Formatter
class 有一个实例。这种方法 将 工作,但您需要将 mypackage.CatalinaConsoleHandler
和公司添加到 system classloader(参见 Tomcat class装载机)。
然而,有一个更简单的方法:Tomcat 有自己的 JUL 扩展(参见 documentation),它允许您:
- 为每个处理程序名称添加前缀并创建多个相同的处理程序class。前缀必须以数字开头(例如
1catalina.
)。带前缀的属性仅适用于特定的处理程序,而 non-prefixed 属性适用于所有处理程序。 - 使用 属性 占位符
${...}
将替换为适当的 Java 系统 属性。还有三个特殊属性(classloader.serverName
、classloader.hostName
和classloader.webappName
)分别解析引擎、主机和上下文的名称。
因此您可以使用:
# List of all handler names:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler
# Handlers attached to the root logger:
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
# These properties apply to all handlers
org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
# These properties apply only to `1catalina.org.apache.juli.AsyncFileHandler`
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.java.util.logging.SimpleFormatter.format = [CatalinaTag %1$tF %1$tT] [%4$-7s] %5$s %n
# These properties apply only to `2localhost.org.apache.juli.AsyncFileHandler`
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.java.util.logging.SimpleFormatter.format = [LocalhostTag %1$tF %1$tT] [%4$-7s] %5$s %n