On 03Dec2015 12:20, Ganesh Pal <ganesh1...@gmail.com> wrote:
I would need few tips from your past experiences on how to store
the test logs
My requirement is to capture log under /var/log/ directory every time
the test is run .
Normally /var/log itself is only writable by root. Unless you are running your
tests as root (_not_ recommended unless you're testing something quite
privileged) the convention is either to create a log directory in the home
directory of the user running the tests (though not if running as root), *or*
to create a subdirectory in /var/log named after your purpose, eg
/var/log/test-results.
The test will create one small log files which are
around 1KB in size .
Fine, unless you're running some poor filesystem (unlikely these days).
Here is how I plan to approach this , create directory based on
current timesamp and store the logs in it .
Sounds reasonable to me, but definitiely inside a top level directory _below_
/var/log.
Sample code :
time_now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + "/"
LOG_DIR = "" + time_now
This is a little weird in a few ways.
Firstly, UPPER_CASE names are normally reserved for what would be called
"constants" in languages like C: top level global names for program wide
defaults. You don't use them for working, changable, names like the computed
name of your log directory. I'd be saying something like this:
# near the top of your program
TOP_LOG_DIR = '/var/log/test-results'
# lower down when computing the subdirectory for this test run
time_now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
results_dir = os.path.join(TOP_LOG_DIR, time_now)
Notice also that this example code does not mention the '/'; on UNIX of course
that is the path separator, and /var/log is a UNIX thing, but generally you
should not unnecessarily put in system depending stuff like '/' (vs '\' on say
Windows) in the middle of your code. So use os.path.join to construct
pathnames.
try:
retcode = os.makedirs(LOG_DIR)
if retcode:
raise Exception(
"Faild to create log directory. mkdir %s failed !!!"
% LOG_DIR)
except Exception, e:
sys.exit("Failed to create log directory...Exiting !!!")
1. Do I need to add the cleanup code to remove the log directory
say /var/log/test_log/2015-11-25_04-07-48/ , because we might have
many more directories like this when test are run multiple times , Iam
avoiding because the test will be run
2/3 times max and file sizes are also very small
I would also avoid it. I would leave that as an entirely separate task for
another program (quite possibly a shell script whose sole purpose it to tidy up
things like that). That way a user can safel;y run your test program _without_
being in fear that it my, unasked, delete a whole bunch of earlier tests data.
Having your test program "clean up" is effectively wiring in a policy decision
into your program, where users cannot avoid or change it. All programs
implement some policy (arbitrary decisions about things beyond their core
purpose, such as tidyup of data they did not create), but that should be
minimised; that way the users can decide on policy themselves.
2. Any better suggestion for my use case.
I would change your try/except code above a little:
os.makedirs does not return zero/nonzero on success/failure like a C library
function, it raises an exception. So remove your if statement, changing this:
retcode = os.makedirs(LOG_DIR)
if retcode:
raise Exception(
"Faild to create log directory. mkdir %s failed !!!" % LOG_DIR)
into:
os.makedirs(results_dir) # see earlier code
Also, you discard the value "e" of the exception. It is almost always best to
report exceptions tso that the user can figure out what went wrong, not merely
to know that something (unidentified) went wrong.
And because os.makedirs raises an except, and the default behaviour of a python
program (without a try/except) is the abort with a nonzero exit and _also_
helpfully report the whole exception and the code which caused it, you could
completely discard your whole try/except!
Finally. sys.exit accepts an integer, not a string.
Cheers,
Cameron Simpson <c...@zip.com.au>
--
https://mail.python.org/mailman/listinfo/python-list