在某些應用程序中,有一些重要的消息總是要記錄(例如應用程序啓動和關閉)當前日誌級別設置。確保重要消息的唯一方法是使用框架(如log4j
和log4net
)將日誌級別設置爲FATAL
。日誌框架中重要但非致命的日誌消息(log4j,log4net,log4php,log4cxx,NLog)
有沒有更好的方法來做到這一點,因爲FATAL
似乎是一個誤導的類別,當應用程序啓動正常,沒有錯誤?
在某些應用程序中,有一些重要的消息總是要記錄(例如應用程序啓動和關閉)當前日誌級別設置。確保重要消息的唯一方法是使用框架(如log4j
和log4net
)將日誌級別設置爲FATAL
。日誌框架中重要但非致命的日誌消息(log4j,log4net,log4php,log4cxx,NLog)
有沒有更好的方法來做到這一點,因爲FATAL
似乎是一個誤導的類別,當應用程序啓動正常,沒有錯誤?
log4net提供有關如何記錄和在何處登錄的所有類型的配置。您可以製作過濾器,並通過特定的附加功能來記錄某些消息以記錄關卡信息的某些消息。你想做的事情在log4X框架中已經成爲可能。看看文檔,看看如何做到這一點。
ILog log = LogManager.GetLogger("MyAllwaysLogMessages");
log.Info(....
現在你可以在MyAllwaysLogMessages過濾添加那些日誌。
對於log4j的(並且,類似的log4cxx),你可以做這樣的事情:
public class Always {
private static Logger logger = Logger.getLogger("logAlways");
public static void log(String message) {
logger.info(message);
}
}
,然後配置logAlways
記錄器記錄所有上述INFO
:
log4j.logger.logAlways=INFO
,這也可能通過API配置以避免某人(非)有意更改配置文件:
public class Always {
private static Logger logger = null;
static {
logger = Logger.getLogger("logAlways");
logger.setLevel(Level.INFO);
}
public static void log(String message) {
logger.info(message);
}
}
使用它然後像
Always.log("Starting up");
沒有,設置消息記錄到的最高可用日誌記錄級別只是爲了確保他們始終記錄是錯誤的做法。
首先,定義你想要的。例如,爲什麼記錄應用程序的啓動和停止很重要?
請注意,有多種日誌記錄。通常的日誌記錄對於開發人員在調查發生了什麼問題時有某種幫助。這是調試日誌記錄,它通常是可選的,因爲如果應用程序正常工作,它對日誌記錄部分無關緊要。調試可以通過不同的方式完成,如果可用的話。
另一種記錄是審計記錄。可能需要記錄用戶登錄或註銷時是否以及何時登錄,更改密碼或稍後執行其他感興趣的任何其他操作,以便能夠驗證每個操作是否正確啓動並完成。
任何Log4X框架都應該能夠同時支持日誌記錄要求,但不同之處在於您應該對它們進行不同的配置。審計日誌記錄不允許任何消息不被髮送到日誌appender,但很可能appender與調試日誌記錄不同。利用這個事實,即你將擁有多個記錄器,並且可以對它們進行不同的配置。