diff -r 2e8eeb919028 -r b538b70cbe51 sysmodellibs/sysmodelgen/src/common/Logger.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysmodellibs/sysmodelgen/src/common/Logger.pm Thu Mar 11 18:20:56 2010 +0200 @@ -0,0 +1,191 @@ +# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +package Logger; + +use FindBin; +use lib $FindBin::Bin; + +use DepConstants; +use LogItem; + +# Global statics: + +# This is expected to be set by the client code using $Logger::LOGFILE +# If it's not defined, the logging is done to stdout +$LOGFILE = ""; + +$SEVERITY = DepConstants::ERROR; + +# Forward declarations: +sub Log($$$$); +sub LogFatal($$$); +sub LogError($$$); +sub LogWarning($$$); +sub LogInfo($$$); +sub LogRaw($); + +#------------------------------------------------------------------------------------------------- +# Subroutine: Log +# Purpose: Logs to the screen +# Input: Messsage, Module Code, Severity +# Output: None +#------------------------------------------------------------------------------------------------- +sub Log($$$$) + { + my $message = $_[0]; + my $callingModule = $_[1]; + my $severity = $_[2] ? $_[2] : DepConstants::INFO; + my $depth = $_[3] ? $_[3] : 0; + + # log this only if its severity level is less than or equal to the user-defined level: + # -w1: errors only (default) + # -w2: warnings as well as errors + # -w3: info messages, warnings and errors. + return if $severity > $SEVERITY; + + my $code = &DepConstants::ModuleErrorCodes($callingModule, $severity); + my $logItem = new LogItem(msg => $message, code => $code, severity => $severity, depth => $depth); + &WriteToFile($logItem->LogText()); + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: LogFatal +# Purpose: Logs to the screen +# Input: Message Module Code +# Output: None +#------------------------------------------------------------------------------------------------- +sub LogFatal($$$) + { + my $message = $_[0]; + my $callingModule = $_[1]; + my $depth = $_[2] ? $_[2] : 0; + my $exitCode = $_[3] ? $_[3] : DepConstants::KFailure; + &Log("Fatal! ".$message, $callingModule, DepConstants::ERROR, $depth); + exit $exitCode; + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: LogError +# Purpose: Logs to the screen +# Input: Message Module Code +# Output: None +#------------------------------------------------------------------------------------------------- +sub LogError($$$) + { + my $message = $_[0]; + my $callingModule = $_[1]; + my $depth = $_[2] ? $_[2] : 0; + &Log($message, $callingModule, DepConstants::ERROR, $depth); + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: LogWarning +# Purpose: Logs to the screen +# Input: Message Module Code +# Output: None +#------------------------------------------------------------------------------------------------- +sub LogWarning($$$) + { + # first check the severity level: + return if $SEVERITY < DepConstants::WARNING; + + my $message = $_[0]; + my $callingModule = $_[1]; + my $depth = $_[2] ? $_[2] : 0; + &Log($message, $callingModule, DepConstants::WARNING, $depth); + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: LogInfo +# Purpose: Logs to the screen +# Input: Message Module Code +# Output: None +#------------------------------------------------------------------------------------------------- +sub LogInfo($$$) + { + # first check the severity level: + return if $SEVERITY < DepConstants::INFO; + + my $message = $_[0]; + my $callingModule = $_[1]; + my $depth = $_[2] ? $_[2] : 0; + &Log($message, $callingModule, DepConstants::INFO, $depth); + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: LogRaw +# Purpose: Logs a piece of raw text to the screen +# Input: Messsage string +# Output: None +#------------------------------------------------------------------------------------------------- +sub LogRaw($) + { + # only log raw text if the warning level is on info - i.e. the most verbose: + return if $SEVERITY < DepConstants::INFO; + &WriteToFile($_[0]); + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: LogList +# Purpose: Logs a list of log items +# Input: array of logs starting with ERROR, WARNING or Note +# Output: None +#------------------------------------------------------------------------------------------------- +sub LogList + { + foreach $log (@_) + { + $log.="\n"; + if($log=~s/^ERROR:\s*//) + { + &LogError($log,DepConstants::KUnknownModuleError,1); + } + elsif($log=~s/^WARNING:\s*//) + { + &LogWarning($log,DepConstants::KUnknownModuleError,1); + } + elsif($log=~s/^Note:\s*//) + { + &LogInfo($log,DepConstants::KUnknownModuleError,1); + } + else + { + &LogRaw($log); + } + } + } + +#------------------------------------------------------------------------------------------------- +# Subroutine: WriteToFile +# Purpose: +# Input: A message string +# Output: None +#------------------------------------------------------------------------------------------------- +sub WriteToFile() + { + my $message = shift; + if ($LOGFILE ne "") + { + open(LOGFILE, ">> $LOGFILE") or die "Can't open the log file '$LOGFILE': $!"; + print LOGFILE $message; + } + else + { + print $message; # print to stdout + } + } + +1;